На этот вопрос уже есть ответ здесь:
У меня около 2855 папок, содержащих большое количество изображений, и я хочу скопировать или переместить все изображения в одну папку.
Пожалуйста, дайте подробное объяснение.
Это - Очень Плохая Идея.
Однако предполагая, что Ваши названия картинки уникальны (хотя дубликаты будут обработаны при помощи mv --backups-numbered
), и все Ваши содержащие изображение каталоги находятся под названным каталогом $HOME/source
, и содержите ТОЛЬКО изображения (никакие файлы, которые не должны быть перемещены), и, имена файлов могли бы содержать глупые символы, и что место назначения $HOME/destination
, затем...
Сначала читайте man find
, man xargs
и man mv
. Затем простое
find $HOME/source -type f -print0 |\
xargs -0 --no-run-if-empty mv --target-directory=$HOME/destination/ --backup=numbered
Перечитать man find
, man xargs
и man mv
для подробного объяснения.
После того, как это заканчивается, Вас оставят с большим количеством пустых каталогов под $HOME/source
, который может быть удален с
find $HOME/source -depth -type d -print0 | xargs -0 --no-run-if-empty rmdir
Читать man rmdir
.
Каталог Change cd
к каталогу, где все папки. Это переместит все файлы в Вашу рабочую папку и подпапки к одной папке. Различные файлы с тем же именем останутся в исходных папках
Выполните команды с осторожностью. Выполнение от неправильного местоположения может вызвать потерю важных файлов.
Выполненный:
find . -type f -print0 | xargs -0 -I _ mv -vn _ /path/to/copy/
если Вы хотите файлы с некоторым расширением, например, .jpg
Выполненный:
find . \( -name '*.jpg' -or -name '*.png' \) -type f -print0 | xargs -0 -I _ mv -vn _ /path/to/copy/