Come eseguire il comando sull'elenco dei nomi dei file in un file?


Risposte:


11

Se hai un file per riga, un modo per farlo è:

tr '\n' '\0' < list_of_files_to_be_deleted.txt | xargs -0 -r rm --

L'elenco dei file viene fornito come input per il trcomando che modifica il separatore di file da avanzamento riga a byte null e il xargscomando legge i file separati da byte null sull'input e avvia il comando rm con i file aggiunti come argomenti.


1
Suggerirei anche di utilizzare rm --invece di solo rm, in modo che i nomi dei file che potrebbero iniziare con trattino non vengano trattati come rmparametri.
artyom,

Non ha funzionato amico ........ tr: operando extra monu.txt' Try tr --help 'per ulteriori informazioni. rm: operando mancante Prova `rm --help 'per maggiori informazioni. ........ Questo è tutto ciò che riesco a vedere
lunedì

1
Forse ti sei perso il <prima del nome del file?
Jonas Berlin,

Ho anche migliorato un po 'anche il comando xargs - aggiunto - secondo il suggerimento di @artyom e aggiunto -r per assicurarmi che non esegua rm se non ci sono file da rimuovere.
Jonas Berlin,

5

La risposta di cui sopra va bene in quanto fa di tutto per gestire i nomi dei file con spazi e "caratteri strani". Ma il modo più semplice, se i nomi dei file sono sani, è solo (attenzione, bashismo!):

rm $(< /the/file/with/names)

Per shell normale:

rm `cat /the/file/with/names`
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.