Подтвердить что ты не робот

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

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

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

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

4b9b3361

Ответ 1

grep -L -Z -r 'Subject: \[SPAM\]' . | xargs -0 -I{} mv {} DIR

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

xargs -0

означает интерпретацию \0 как разделителей.

Тогда

-I{} mv {} DIR

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

Ответ 2

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

grep -L -r 'Subject: \[SPAM\]' . | while read f; do mv "$f" out; done

Ответ 3

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

grep -l 'Subject: \[SPAM\]' | xargs -I '{}' mv '{}' DIR

Ответ 4

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

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

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

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

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

Ответ 5

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

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

Ответ 6

Возможно, это сработает:

mv $(grep -l 'Subject: \[SPAM\]' | awk -F ':' '{print $1}') your_file

Ответ 7

mv `grep -L -r 'Subject: \[SPAM\]' .` <directory_path>

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

Ответ 8

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

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

Ответ 9

Работайте идеально для меня:

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

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

Я надеюсь, что это поможет