Удалите все файлы с шаблоном

У меня есть тысячи txt файлов в одной папке. Многие из них являются ненужными для меня. Я хочу удалить все ненужные файлы сразу. Если я сделаю это вручную (путем открытия каждого файла, посмотрите, что это довольно, и удалите его), то будет требоваться много времени и усилий. Но у меня есть некоторые шаблоны (некоторые слова) (слова являются содержанием файла, не названием файла), который имеют ненужные файлы. Мои необходимые файлы не имеют этих шаблонов. Таким образом, ненужные файлы могут быть фильтрованы и удалили использование этих шаблонов.

Я присоединил один снимок экрана ненужного файла для лучшего понимания. Выделенное слово может использоваться в качестве шаблона. this

1
задан 18 August 2018 в 13:45

1 ответ

Можно использовать команды grep и xargs следующим образом:

grep -rlZ '=head1 NAME' /target-directory/ | xargs -0 rm -f

grep команда будет работать рекурсивно -r/target-directory/) и произведет только названия файлов -l это содержит шаблон '=head1 NAME'. -Z опция произведет нулевой байт (символ ASCII NUL) вместо символа, который обычно следует за именем файла.

Этот вывод будет передан по каналу | к stdin xargs команда, где -0 средства, что входные параметры будут завершены нулевым символом вместо пробелом. Команда, которая будет выполняться, rm -f это означает, что сила удаляет.

Благодаря @steeldriver для заключительного улучшения ответа!


Кроме того, можно добавить -L1 (считайте одну строку на выполнение) к xargs команда и echo выполнить пробный прогон:

grep -rlZ '=head1 NAME' /target-directory/ | xargs -L1 -0 echo rm -f

Если Вы хотите переместиться, файлы где-нибудь вместо удаляют их, изменяют команду таким образом:

grep -rlZ '=head1 NAME' /tgt-dir/ | xargs -L1 -0 -I {} echo mv {} /destination-dir/

Или поскольку @PerlDuck сказал"mv также имеет переключатель -t, --target-directory=DIRECTORY который позволяет помещать каталог сначала и файлы в последний раз... Сюда mv не назван однажды для каждого единственного файла, но однажды для набора файлов. ":

grep -rlZ '=head1 NAME' /tgt-dir/ | xargs -0 echo mv -t /destination-dir/
2
ответ дан 7 December 2019 в 13:22

Другие вопросы по тегам:

Похожие вопросы: