Comment supprimer tous les fichiers commençant par une certaine chaîne sous Linux

36

J'ai besoin de trouver tous les fichiers commençant par le nom NAMEdans une arborescence de répertoires et de supprimer tous ces fichiers à l'aide d'une seule commande shell.

Achini Pumika
la source

Réponses:

1

pour supprimer tous les fichiers dont le nom a un nom --- vous pouvez utiliser

find -name . 'name*' -exec rm {} \;
Communauté
la source
1
Vous pouvez également ajouter -f en tant qu'argument 'rm' afin de ne pas être invité à "Voulez-vous vraiment supprimer le fichier X?"
UtahJarhead
Quelle version de greppossède un -execinterrupteur?
Ben Graham
Pourquoi ce commentaire a-t-il des votes négatifs?
Ultrasonic54321
64

Supprimez tous les fichiers dans le répertoire courant et ses sous-répertoires où le nom de fichier commence par "foo":

$ find . -type f -name foo\* -exec rm {} \;

NB: utiliser avec prudence - sauvegarder en premier - effectuer également un essai à sec en premier, par ex.

$ find . -type f -name foo\*

vous indiquera simplement les noms des fichiers qui seront supprimés.

Paul R
la source
5
J'ai dû supprimer plus de 2 millions de fichiers et rencontrer des problèmes, a find . -type f -name foo\* -deletefait l'affaire
Linas
25

J'ai essayé de cette façon, cela fonctionne pour moi, essayez la commande ci-dessous.

rm -rf Example*

ici "Exemple" est un texte commun à tous les fichiers.

Dinesh Bhojvani
la source
4
Je ne sais pas pourquoi ce n'est pas la réponse la plus votée ....
DanTheMan
@DanTheMan C'est parce que c'est ~ 4 ans plus récent que les autres réponses. C'est certainement la réponse la plus simple.
joshuakcockrell
10

Vous pouvez utiliser find:

find . -name "name*" -exec rm {} \;
PP
la source
Aussi, au lieu de spécifier "." vous pouvez spécifier un chemin absolu.
UtahJarhead
3

Avec l' globstaroption (activer avec shopt -s globstar):

rm -f **/NAME*

**/se développe en ./, */, */*/, */*/*/etc. Si vous avez un répertoire nom commençant parNAME la commande se plaignent que rmne peut pas supprimer des répertoires, mais c'est tout.

Notez que cela peut entraîner des limitations de longueur de ligne de commande si le glob correspond à plusieurs fichiers.

Alternativement, avec aussi peu d'appels rmque possible, mais sans aucune limitation de longueur de ligne de commande:

find . -type f -name 'NAME*' -exec rm -f {} +

(Remarquez au +lieu de \;fermer la -execdéclaration.)

Benjamin W.
la source
2

find . -name 'foo'* -type f -delete semble être la réponse la plus simple.

Vous pouvez l'exécuter sans l' -deleteindicateur avant pour voir quels fichiers seront supprimés.

Yehuda Schwartz
la source
-2

Recherchez le numéro "Inode" du fichier / dossier, puis supprimez-le à l'aide du numéro d'inode. Voici un exemple:

ls -il
3407873 drwxr-xr-x. 2 root   root      4096 Mar 30 07:49 p

find . -inum 3407873 -exec rm -rf {} \;
Diwa
la source
C'est une bonne réponse - à une question différente . Ce n'est pas une réponse à cette question.
Scott