Как перенести все файлы, выводимые из команды?

У меня есть команда grep для поиска файлов без вложения в них.

grep -L -- Attachments * 

Я хочу переместить все файлы, которые выводятся из этой команды. Как это сделать в bash? Я использую трубку? Я использую более многословный оператор if / then в полноэкранном сценарии?

2 Solutions collect form web for “Как перенести все файлы, выводимые из команды?”

Если вы знаете, что нет, если имена файлов содержат новые строки, вкладки, пробелы или комбинации глобусов, которые могут привести к совпадению, это может быть проще для одного случая:

 mv $(grep -L Attachments *) dest_dir 

То, что вы хотите сделать, это использовать параметр pipe и grep s -Z :

Использование GNU grep и mv

 grep -LZ -- Attachments * | xargs -0 mv -t target_directory 

-Z сочетании с xargs -0 обрабатывает любые имена файлов со специальными символами.

Использование BSD grep и mv (например, на MacOS X)

 grep -L --null -- Attachments * | while IFS= read -r -d "" file; do mv "./$file" target_directory done 

В BSD grep -Z означает декомпрессию , grep --null работает как с BSD, так и с GNU. В BSD mv отсутствует опция -t

Linux и Unix - лучшая ОС в мире.