Jak wykonać polecenie na liście nazw plików w pliku?


11

Wymieniłem nazwy plików, które mają zostać usunięte do pliku. Jak mogę przekazać plik do rmpolecenia, aby mógł je usuwać jeden po drugim.


Odpowiedzi:


11

Jeśli masz jeden plik w linii, jednym ze sposobów jest:

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

Lista plików jest podawana jako dane wejściowe dla trpolecenia, które zmienia separator plików z podawania liniowego na bajt zerowy, a xargspolecenie odczytuje pliki oddzielone bajtami zerowymi na wejściu i uruchamia polecenie rm z plikami dołączonymi jako argumenty.


1
Sugeruję również użycie rm --zamiast po prostu rm, aby nazwy plików, które mogą zaczynać się od myślnika, nie były traktowane jako rmparametry.
artyom

To nie zadziałało, kolego ... tr: extra operand monu.txt' Try tr --help 'po więcej informacji. rm: brakujący operand Aby uzyskać więcej informacji, wypróbuj `rm --help '. ........ To wszystko, co mogę zobaczyć
pon.

1
Czy może przegapiłeś <przed nazwą pliku?
Jonas Berlin

Ulepszyłem też trochę komendę xargs - dodałem - zgodnie z sugestią @artyoma i dodałem -r, aby upewnić się, że nie uruchomi się polecenia rm, jeśli nie ma żadnych plików do usunięcia.
Jonas Berlin

5

Powyższa odpowiedź jest dobra, ponieważ bardzo się stara, aby obsługiwać nazwy plików ze spacjami i „dziwnymi znakami”. Ale najprostszym sposobem, jeśli nazwy plików są rozsądne, jest po prostu (ostrzeżenie, bashism!):

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

Dla zwykłej powłoki:

rm `cat /the/file/with/names`
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.