Soluzione 1:
Generalmente trovo che l'uso del -exec
opzione per find
essere più facile e meno confuso. Prova questo:
find . -name vmware-*.log -exec rm -i {} \;
Tutto dopo -exec
è considerato un comando da eseguire per ogni risultato, fino al ;
, che qui è sottoposto a escape in modo che venga passato a find
. Il {}
è sostituito con il nome del file find
verrebbe normalmente stampato.
Una volta verificato che fa quello che vuoi, puoi rimuovere il -i
.
Soluzione 2:
Se hai GNU find
puoi usare il -delete
opzione:
find . -name "vmware-*.log" -delete
Per utilizzare xargs
ed evitare il problema con gli spazi nei nomi dei file:
find . -name vmware-*.log -print0 | xargs -0 rm
Tuttavia, i tuoi file di registro non dovrebbero avere spazi nei loro nomi. È probabile che i documenti di elaborazione testi e i file MP3 li contengano, ma dovresti essere in grado di controllare i nomi dei tuoi file di registro.
Soluzione 3:
Puoi dire find
per delimitare l'elenco di output con NULL e xargs
per ricevere la sua lista di input allo stesso modo:
$ 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'
Inoltre, assicurati di eseguire l'escape di *
, con una barra rovesciata o contenendo il vmware-*.log
tra virgolette singole, altrimenti la tua shell potrebbe tentare di espanderlo prima di passarlo a find
.
Soluzione 4:
Non dimenticare -delete
della ricerca opzione. Rimuove il file senza errori con caratteri speciali...