Командная строка cp или rsync для сканирования диска в поисках только определенных типов файлов и их размещения где-либо?

Командная строка cp или rsync для сканирования диска в поисках только определенных типов файлов и их размещения где-либо?

Возможно ли только с помощью командной строки использовать что-то вроде команды 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

Преимущество этого способа в том, что вы можете также просмотреть скрипты и убедиться, что все выглядит хорошо, прежде чем фактически запускать команды. Я несколько раз обжигался, запуская команду с... эм... неожиданными результатами :)

Плюс ко всему, наличие сценария также дает вам представление о том, что вы будете делать.

Связанный контент