Как выполнить команду по списку имен файлов в файле?


Ответы:


11

Если у вас есть один файл на строку, один из способов сделать это:

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

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


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

Это не сработало, приятель ........ 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.