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