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 finde xargsutilizzare entrambi i terminatori null
find . -name "*.txt" -print0 | xargs -0 rm
o (più semplice) utilizzare l' -deleteazione integrata difind
find . -name "*.txt" -delete
o (grazie @kos)
find . -name "*.txt" -exec rm {} +
nessuno dei due dovrebbe rispettare il ARG_MAXlimite del sistema senza necessità xargs.
ARG_MAXciterò anche che find . -name "*.txt" -exec rm {} \;sarebbe un "tiro sicuro"
-print0deve 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
-0invece di -d(per xargs) per i sistemi BSD. Cosa usa Ubuntu? La risposta accettata qui utilizza -0. Cosa è corretto?
find -name "*\ *.txt" | xargs rmfunziona con file di due parole?