Як перемістити всі файли, що виводяться з команди?


22

У мене є ця команда grep, щоб знайти файли без слова "Вкладені файли".

grep -L -- Attachments *

Я хочу перемістити всі файли, які виводяться з цієї команди. Як це зробити в баш? Чи використовую трубу? Чи використовую я більш багатослівний оператор if / then у повноцінному сценарії?

Відповіді:


18

Якщо ви знаєте, що жоден, якщо імена файлів містять нові рядки, вкладки, пробіли або поєднання глобусів, які можуть призвести до відповідності, це може бути простішим для окремого випадку

mv $(grep -L Attachments *) dest_dir

36

Що ви хочете зробити - це скористатися опцією pipe and greps -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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.