Я пытаюсь запустить простую команду, которая ищет определенный тип файла и после его нахождения копирует этот файл и структуру каталогов на удаленный сервер.
Например:
find Source/ -name *.CR2 | xargs -d '\n' cp --parents -t /STORAGE/location/
В этом случае он берет найденный файл и копирует его в отдельный каталог со структурой родительских папок. Я хотел бы сделать то же самое с помощью rsync или scp.
Я попробовал внести некоторые изменения в код ниже, но безуспешно.
find /src/dir/ -name *.CR2 -printf %P\\0 \ | rsync -av -e ssh --files-from=- --from0 /src/dir/ remote@server:/Storage/
Любая помощь будет оценена.
Я сортирую семейные фотографии за несколько лет, и вместо того, чтобы искать их в одном каталоге на моем массиве zfs и переписывать их в другое место на том же массиве (что съедает время), я хочу найти их и отправить на отдельную машину, где они будут отсортированы по типу, пройдены fdupes
, а затем пройдены phockup
для сортировки по дате. Я делаю это так на случай, если я облажаюсь, у меня будут файлы orig в целости и сохранности.
Редактировать: Я хотел бы поблагодарить людей, которые ответили на мой вопрос. К счастью, я нашел решение до того, как вы ответили, к сожалению, я не думал о том, насколько медленным будет решение. Поэтому я решил просто сделать это так, как я делал это раньше.
Это был код, который работал у меня. Хотя для корректной работы требовались некоторые передачи ssh-ключа, чтобы мне не пришлось вводить пароль для каждого файла.
find Sorted/ -name *.JPG -exec rsync -a -e ssh --relative '{}' usr@remote:/1/2/3/ ';'
Я попробую воспользоваться другими упомянутыми рекомендациями и посмотреть, будут ли они быстрее, но на данный момент я просто создал скрипт оболочки, работающий в фоновом режиме.
Еще раз спасибо!
решение1
find Source/ -type f -name '*.CR2' -print0 |
rsync --dry-run -av --files-from - --from0 . remote@server:/Storage/
Удалите --dry-run
, когда будете довольны тем, что планируете сделать.
решение2
Ниже приведена команда, которую мы можем использовать
find path -type f -iname "filename" -exec scp {} destinationhost:/var/tmp/ \;