Используйте grep для поиска содержимого в файлах и перемещения их, если они совпадают - PullRequest
48 голосов
/ 18 сентября 2008

Я использую grep для создания списка файлов, которые мне нужно переместить:

grep -L -r 'Subject: \[SPAM\]' .

Как передать этот список команде mv и переместить файлы куда-нибудь еще?

Ответы [ 9 ]

72 голосов
/ 18 сентября 2008
grep -L -Z -r 'Subject: \[SPAM\]' . | xargs -0 -I{} mv {} DIR

-Z означает вывод с нулями (\ 0) после имен файлов (поэтому пробелы не используются в качестве разделителей).

xargs -0

означает интерпретировать \ 0 как разделители.

Тогда

-I{} mv {} DIR

означает заменить {} именами файлов, поэтому вы получите mv filenames DIR.

18 голосов
/ 18 сентября 2008

Эта альтернатива работает там, где xargs недоступен:

grep -L -r 'Subject: \[SPAM\]' . | while read f; do mv "$f" out; done
5 голосов
/ 03 апреля 2015

Вот что мне помогло:

grep -lir 'spam' ./ | xargs mv -t ../spam

Конечно, я уже был в нужной папке (поэтому ./) и переместил их в соседнюю папку. Но вы можете изменить их на любые пути.

Я не знаю, почему принятый ответ не сработал. Также у меня не было пробелов и специальных символов в именах файлов - возможно, это не сработает.

Украдено здесь: Команда Grep для поиска файлов, содержащих текстовую строку, и перемещения их

5 голосов
/ 31 мая 2010

Это то, что я использую в Fedora Core 12:

grep -l 'Subject: \[SPAM\]' | xargs -I '{}' mv '{}' DIR
2 голосов
/ 10 сентября 2015
mv `grep -L -r 'Subject: \[SPAM\]' .` <directory_path>

Предполагая, что записанный вами grep возвращает ожидаемые пути к файлам.

2 голосов
/ 14 февраля 2012

Может быть, это будет работать:

mv $(grep -l 'Subject: \[SPAM\]' | awk -F ':' '{print $1}') your_file
1 голос
/ 18 сентября 2008

Есть несколько способов, но есть медленный, но безотказный:

IFS=$'\n'; # set the field separator to line break
for $mail in $(grep -L -r 'Subject: \[SPAM\]' .); do mv "$mail" your_dir; done;
IFS=' '; # restore FS
0 голосов
/ 05 сентября 2014

Идеальная работа для меня:

  • переместить файлы, содержащие текст со словом MYSTRINGTOSEARCH, в каталог MYDIR.

    найти. -type f -exec grep -il 'MYSTRINGTOSEARCH' {} \; -exec mv {} MYDIR / \;

Надеюсь, это поможет

0 голосов
/ 18 сентября 2008

Вы можете передать результат следующей команде, используя grep ... | xargs mv {} пункт назначения

Проверьте man xargs для дополнительной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...