Как рекурсивно переместить файлы из подкаталогов с заданным расширением в папку назначения? [дубликат]

На этот вопрос уже есть ответ здесь:

Я хочу переместить все файлы *. Txt из всех подкаталогов, расположенных в данном каталоге, в один каталог назначения.

При выполнении описанных ниже действий перемещается КАЖДЫЙ файл - как уменьшить его до всех файлов *. Txt ?

find -type f -print0|xargs -0r mv -it "/path to my folder/destination-directory"
9
задан 27 February 2017 в 08:59

4 ответа

Добавьте -name, тест

find -type f -name "*.txt" -print0 |...

не забывает заключать шарик в кавычки для предотвращения расширений оболочки.

Для поиска без учета регистра, используйте -iname вместо -name

6
ответ дан 23 November 2019 в 04:48
find /folder/ -type f -name "*.txt" -exec mv {} /other/folder/ \;

я протестировал это, работы приятно.

3
ответ дан 23 November 2019 в 04:48

Используя Вашу исходную команду:

find . -type f -name "*.txt" -print0|xargs -0r mv -it /path/to/destination

Информация:

  1. .: поиск в текущем месте

  2. "*.txt": файлы, которые имеют .txt расширение на их имена

2
ответ дан 23 November 2019 в 04:48

Используйте шаблон шарика с -name опция find указать на желаемый шаблон, *.txt в Вашем случае:

find . -type f -name '*.txt' -exec mv -t /destination {} +

Конечно, замена /destination с фактическим целевым каталогом.

Примечания:

  • Вы не должны метать икру xargs и неименованный канал, используйте mv логика в -exec предикат find

  • find ... -exec дескрипторы весь вид возможных имен файлов и ARG_MAX также

  • GNU mv (значение по умолчанию в Ubuntu), имеет -t взять целевой каталог, так, чтобы можно было усилить + аргумент -exec отправить все файлы в единственном выполнении mv (или по крайней мере минимальные выполнения, если ARG_MAX инициирован в процессе),

11
ответ дан 23 November 2019 в 04:48

Другие вопросы по тегам:

Похожие вопросы: