Як виконати команду зі списку імен файлів у файлі?


Відповіді:


11

Якщо у вас є один файл у рядку, один із способів зробити це:

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

Список файлів подається як вхід до trкоманди, яка змінює розділювач файлів з рядкової стрічки на нульовий байт і xargsкоманда читає файли, розділені нульовими байтами на вході, і запускає команду rm з файлами, доданими як аргументи.


1
Я б також запропонував використовувати rm --замість просто rm, щоб назви файлів, які можуть починатися з тире, не розглядалися як rmпараметри.
artyom

Друг не працював ........ tr: додатковий операнд monu.txt' Try tr --help 'для отримання додаткової інформації. rm: відсутній операнд Спробуйте `rm --help 'для отримання додаткової інформації. ........ Це все, що я можу побачити
понеділок,

1
Ви, можливо, пропустили <перед назвою файлу?
Йонас Берлін

Я трохи вдосконалив команду xargs - додав - згідно з пропозицією @artyom і додав -r, щоб переконатися, що він не запускає rm, якщо немає файлів для видалення.
Йонас Берлін

5

Вищезгадана відповідь чудова тим, що вона дуже сильно обробляє імена файлів з пробілами та "дивними характеристиками". Але найпростіший спосіб, якщо імена файлів є здоровими, - це просто (попередження, башизм!):

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

Для звичайної оболонки:

rm `cat /the/file/with/names`
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.