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.

Réponses:


1

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

find -name . 'name*' -exec rm {} \;

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.


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.


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 {} \;

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.)


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.


-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 {} \;

C'est une bonne réponse - à une question différente . Ce n'est pas une réponse à cette question.
Scott
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.