Возможно ли только с помощью командной строки использовать что-то вроде команды cp
или rsync
для сканирования жесткого диска, ища только файлы изображений/видео? И, может быть, в процессе копирования их в другое место, сохраняя имена папок/пути в новом месте?
У меня есть пара старых жестких дисков, на которых я хочу сделать резервные копии фотографий и видео, но они в лучшем случае разбросаны по тысячам папок, и я бы предпочел, чтобы компьютер выполнял большую часть черновой работы за меня, если это вообще возможно. Но я все еще изучаю командную строку и ее впечатляющие возможности.
решение1
Вы можете использовать find
для поиска интересующих вас файлов, например:
find /mnt/hd1 -name \*.jpg
будет искать файлы jpg (ну, файлы с расширением .jpg) в каталоге /mnt/hd1. Если вы хотите просто скопировать эти файлы куда-нибудь, вы можете:
find /mnt/hd1 -name \*.jpg -exec cp {} /mnt/dest
Эта команда запустит cp
каждый файл, который она сможет найти в каталоге /mnt/dest.
Надеюсь, поможет :)
решение2
Другая возможность, если вы не хотите автоматизировать это в один скрипт, — использовать команду find для создания скрипта bash. Затем запустить скрипт bash. Таким образом вы также сможете узнать происхождение файла.
Также я бы немного изменил вышесказанное на случай, если у вас есть дублирующиеся имена файлов, если вы подозреваете это в своей среде. Вам понадобится проверка ошибок в вашем скрипте.
Вы также хотите сохранить путь к каталогу?
т.е. если файл здесь
/источник/a/b/c/d/e.jpg
Вы хотите скопировать его в
/dest/a/b/c/d/e.jpg ?
или
/dest/e.jpg ?
Таким примером может быть
find /source -type f -name "*.jpg" -print | awk '{"cp -p "$1" /backup/}' > copy.sh
Это скопирует только в один каталог /backup
Чтобы сохранить, вы могли бы сделать
(cd /source; find . -type f -name "*.jpg" -print | awk '{"cp -p "$1" /backup/"$1}') > copy.sh
Но тогда вам сначала нужно будет создать все каталоги.
(cd /source; find . -type d -print | awk '{print "mkdir -p /backup/"$1}' > mkdir.sh
Преимущество этого способа в том, что вы можете также просмотреть скрипты и убедиться, что все выглядит хорошо, прежде чем фактически запускать команды. Я несколько раз обжигался, запуская команду с... эм... неожиданными результатами :)
Плюс ко всему, наличие сценария также дает вам представление о том, что вы будете делать.