




Вы можете передать результат следующей команде, используя grep ... | xargs mv {} пункт назначения
Проверьте man xargs для получения дополнительной информации.
Есть несколько способов, но вот медленный, но надежный:
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
Если вы хотите найти и переместить файлы, которые не соответствуют вашему шаблону (переместить файлы, которые не содержат 'Subject \[SPAM\]' в этом примере), используйте:
grep -L -Z -r 'Subject: \[SPAM\]' . | xargs -0 -I{} mv {} DIR
-Z означает вывод с нулями (\ 0) после имен файлов (поэтому пробелы не используются в качестве разделителей).
xargs -0
означает интерпретировать \ 0 как разделители.
-L означает поиск файлов, не соответствующих шаблону. Замените -L на -l, если вы хотите переместить файлы, соответствующие вашему шаблону.
потом
-I{} mv {} DIR
означает заменить {} на имена файлов, так что вы получите mv filenames DIR.
В моих xargs -i устарел. Но у sandrv может быть более старая версия (например, YMMV).
Разве это не должно быть -l вместо -L?
Я думаю, что спрашивающий пытался найти файлы без темы [СПАМ] и переместить их, так что ответ, сохраняющий это, правильный. да, хотя ... -l, вероятно, имеет смысл по умолчанию.
Эта альтернатива работает там, где аргументы недоступны:
grep -L -r 'Subject: \[SPAM\]' . | while read f; do mv "$f" out; done
Вот что я использую в Fedora Core 12:
grep -l 'Subject: \[SPAM\]' | xargs -I '{}' mv '{}' DIR
Возможно, это сработает:
mv $(grep -l 'Subject: \[SPAM\]' | awk -F ':' '{print }') your_file
Идеальная работа для меня:
переместите файлы, содержащие текст со словом MYSTRINGTOSEARCH, в каталог MYDIR.
найти . -type f -exec grep -il 'MYSTRINGTOSEARCH' {} \; -exec mv {} MYDIR / \;
надеюсь, это поможет
Вот что мне помогло:
grep -lir 'spam' ./ | xargs mv -t ../spam
Конечно, я уже был в нужной папке (поэтому ./) и переместил их в соседнюю папку. Но вы можете изменить их на любые пути.
Я не знаю, почему принятый ответ не сработал. Также у меня не было пробелов и специальных символов в именах файлов - возможно, это не сработает.
Здесь украли: Команда grep для поиска файлов, содержащих текстовую строку, и их перемещения
mv `grep -L -r 'Subject: \[SPAM\]' .` <directory_path>
Предполагая, что написанная вами команда grep возвращает ожидаемые пути к файлам.
Спасибо, заглавная - я должен писать строчные буквы на моих xargs