2

Я запустил команду, которая находит много файлов на основе некоторых критериев поиска. Он возвращает файлы так:

./somepath/somepath/file.something
./asdf/asdf/s.php
./etc/a.php
./a/b/c/d/e/f/g.jpg

Поэтому мне было интересно, если я записываю этот вывод в файл (т.е. по одному файлу на строку), может ли кто-нибудь помочь мне написать команду, которая выполняет итерацию по файлу и перемещает файлы один за другим в указанный каталог?

Заранее спасибо.

3 ответа3

3
while read -r filename
  do
  mv -- "$filename" directory
done < list_of_files.txt

Не проверено (я на рабочем ПК под управлением Windows), но должно работать.

2
your_command | xargs -I% mv "%" dest_dir

Если ваша команда находится в find или у вас есть какой-нибудь способ завершить имена файлов нулем:

your_command | xargs -0 -I% mv "%" dest_dir

или же

find [find-args] -print0 | xargs -0 -I% mv "%" dest_dir

Использование нулей для завершения имен файлов позволяет работать с именами файлов, которые могут содержать пробелы, переводы строки и т.д.

Вы также можете использовать xargs для обработки вашего файла, если вы уже создали его:

xargs -a filename -I% mv "%" dest_dir
-1

Другой вариант, если имена файлов не содержат пробелов, будет

mv `search_command_here` dest_directory

(Синтаксис backtick также является bash-ism, но в вопросе конкретно говорится, что это в Linux и во всех основных дистрибутивах Linux по умолчанию используется bash.)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .