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