Normalmente per rimuovere i file con spazi nel loro nome file dovresti eseguire:
$ rm "file name"
ma se voglio rimuovere più file, ad esempio:
$ find . -name "*.txt" | xargs rm
Ciò non eliminerà i file con spazi all'interno.
Normalmente per rimuovere i file con spazi nel loro nome file dovresti eseguire:
$ rm "file name"
ma se voglio rimuovere più file, ad esempio:
$ find . -name "*.txt" | xargs rm
Ciò non eliminerà i file con spazi all'interno.
Risposte:
Puoi dire find
e xargs
utilizzare entrambi i terminatori null
find . -name "*.txt" -print0 | xargs -0 rm
o (più semplice) utilizzare l' -delete
azione integrata difind
find . -name "*.txt" -delete
o (grazie @kos)
find . -name "*.txt" -exec rm {} +
nessuno dei due dovrebbe rispettare il ARG_MAX
limite del sistema senza necessità xargs
.
ARG_MAX
citerò anche che find . -name "*.txt" -exec rm {} \;
sarebbe un "tiro sicuro"
-print0
deve essere l'ultima opzione (o almeno dopo -name "*.txt"
) altrimenti questo colpirà i file non più limitati a*.txt
...
Per inciso, se hai usato qualcosa di diverso da find, puoi usare tr per sostituire le newline con byte nulli.
Per esempio. il seguente liner cancella gli ultimi 10 file modificati in una directory, anche se hanno spazi nei loro nomi.
ls -tp | grep -v / | head -n 10 | tr "\n" "\0" | xargs -0 rm
Il comando xargs utilizza schede, spazi e nuove linee come delimitatori per impostazione predefinita. Puoi dirgli di usare solo i caratteri di nuova riga ('\ n') con l'opzione -d:
find . -name "*.txt" | xargs -d '\n' rm
-0
invece di -d
(per xargs
) per i sistemi BSD. Cosa usa Ubuntu? La risposta accettata qui utilizza -0
. Cosa è corretto?
find -name "*\ *.txt" | xargs rm
funziona con file di due parole?