Comment supprimer le contenu d'un répertoire dans Centos

9

J'ai besoin de supprimer tout le contenu d'un dossier dans CentOS mais pas le dossier lui-même.

Par exemple: J'ai un dossier nommé "MYFOLDER" qui contient les sous-dossiers FOLD_1, FOLD_2, FOLD_3, FOLD_4 ... etc, et certains fichiers. Je dois supprimer tous ces dossiers et fichiers, mais pas le dossier conteneur MYFOLDER. J'ai besoin de ce répertoire pour diriger les résultats d'un processus précédent.

J'ai essayé avec la rm -rf commande, mais cela supprime également le dossier du conteneur.

verofairy
la source

Réponses:

11

Supprimez plutôt le contenu du dossier.

rm -r MYFOLDER/*
Ignacio Vazquez-Abrams
la source
1
Notez que cela ne masque pas les fichiers / répertoires dans MYFOLDER
tylerl
1
@tylerl: C'est le cas si vous définissez d' shopt -s dotglobabord.
jgoldschrafe
Cela vous oblige à approuver manuellement o / n descendant dans chaque sous-répertoire, ce qui est une perte de temps complète. La commande correcte gérerait tout cela automatiquement afin que vous ne soyez pas bloqué avec 50 invites.
CodeMed
rm -R /path/to/myfolder/*est la syntaxe correcte pour éviter les demandes excessives d'approuver la suppression de chaque fichier et sous-dossier. Notez le capital R.
CodeMed
5

Vous pouvez utiliser:

rm -r MYFOLDER/{.[^.],.??*}

Cela supprime également les fichiers et dossiers cachés. Si vous avez trop de fichiers dans le répertoire MYFOLDER, vous devez exécuter à la place:

ls MYFOLDER/{.[^.],.??*}|xargs rm -r
Mircea Vutcovici
la source
J'ai plus de 500k fichiers dans mon meta/répertoire, donc je voulais essayer l'alternative xargs, mais je reçois ces messages d'erreur: ls: cannot access meta/.[^.]: No such file or directory ls: cannot access meta/.??*: No such file or directory rm: missing operand
Andres SK
1
Assurez-vous d'utiliser bashShell. Le shell doit prendre en charge "Brace Expansion" et "Regular Expressions" pour les modèles de fichiers.
Mircea Vutcovici
3

À mon avis, la façon la plus simple est de supprimer le répertoire entier, y compris lui-même, puis de recréer le dossier. Il y a des situations où ce n'est pas une bonne solution (comme des scripts sans assistance ou des pipelines plus complexes), mais vous n'avez pas spécifié pourquoi vous ne vouliez pas supprimer le dossier.

rm -rf foldername
mkdir foldername

Oops. Vous l'avez précisé (j'ai relu votre message). Eh bien, la suppression et la recréation peuvent fonctionner. Surtout si vous enchaînez des commandes, comme

rm -rf foldername && mkdir foldername

Ou

rm -rf foldername; mkdir foldername
JDS
la source
Parfois, vous n'avez pas d'autorisation dans le dossier parent ou vous souhaitez conserver certains attributs que vous ignorez. Par exemple, vous ne pouvez pas supprimer votre dossier de départ en tant qu'utilisateur non root, mais vous pouvez supprimer tout ce qu'il contient.
Mircea Vutcovici
Cela devrait être la réponse acceptée. +1
CodeMed
0

Que diriez-vous

cd MYFOLDER
find . | rm -rf

Cela supprime également les fichiers cachés (ceux commençant par un point).

Janne Pikkarainen
la source
1
Cela supprimera également MYFOLDER.
Mircea Vutcovici
0

Essayez rm -r -f filenameson fonctionnement avec CentOS 6.x

Shiv Singh
la source
0

Je recommande fortement cette alternative (elle supprime également les fichiers avec des espaces dans les noms):

find MYFOLDER/ -type f -print0 | xargs -0 rm -f
Andres SK
la source