Solution 1 :
Je trouve généralement qu'en utilisant le -exec
option pour find
pour être plus facile et moins déroutant. Essayez ceci :
find . -name vmware-*.log -exec rm -i {} \;
Tout après -exec
est considéré comme une commande à exécuter pour chaque résultat, jusqu'au ;
, qui est échappé ici afin qu'il soit passé à find
. Le {}
est remplacé par le nom de fichier find
imprimerait normalement.
Une fois que vous avez vérifié qu'il fait ce que vous voulez, vous pouvez supprimer le -i
.
Solution 2 :
Si vous avez GNU find
vous pouvez utiliser le -delete
choix :
find . -name "vmware-*.log" -delete
Pour utiliser xargs
et évitez le problème des espaces dans les noms de fichiers :
find . -name vmware-*.log -print0 | xargs -0 rm
Cependant, vos fichiers journaux ne doivent pas contenir d'espaces dans leurs noms. Les documents de traitement de texte et les fichiers MP3 sont susceptibles d'en contenir, mais vous devriez pouvoir contrôler les noms de vos fichiers journaux.
Solution 3 :
Vous pouvez dire find
pour délimiter la liste de sortie avec des NULL, et xargs
pour recevoir sa liste d'entrée de la même manière :
$ ls -l "file 1" "file 2"
-rw-r--r-- 1 james james 0 Oct 19 13:28 file 1
-rw-r--r-- 1 james james 0 Oct 19 13:28 file 2
$ find . -name 'file *' -print0 | xargs -0 ls -l
-rw-r--r-- 1 james james 0 Oct 19 13:28 ./file 1
-rw-r--r-- 1 james james 0 Oct 19 13:28 ./file 2
$ find . -name 'file *' -print0 | xargs -0 rm -v
removed `./file 2'
removed `./file 1'
Assurez-vous également d'échapper le *
, soit avec un antislash, soit en contenant le vmware-*.log
entre guillemets simples, sinon votre shell peut essayer de l'étendre avant de le passer à find
.
Solution 4 :
N'oubliez pas le -delete
de la trouvaille option. Il supprime le fichier sans erreur avec des caractères spéciaux...