Скопируйте список файлов на удаленный компьютер при создании родительских папок.

У меня есть список файлов, лежащих в подкаталогах, которые я создал, вызвав find:

for f in $(find . -name "myFile.txt"); do 
    echo "$f" >> filelist.txt;
done

Содержание filelist.txt выглядит так:

./First/Path/To/File/myFile.txt
./Second/Path/To/File/myFile.txt
./Third/Path/To/File/myFile.txt
...

Теперь я хочу скопировать все эти файлы на удаленный компьютер, чтобы они помещались в соответствующие папки:

remoteComputerName:/some/root/directory/First/Path/To/File/myFile.txt
remoteComputerName:/some/root/directory/Second/Path/To/File/myFile.txt
remoteComputerName:/some/root/directory/Third/Path/To/File/myFile.txt

Однако на удаленном компьютере структура папок First/Path/To/File/ и т.д., еще не существует, а также я не хочу копировать целые каталоги, но только файл myFile.txt в этом.

Я знаю, что на локальном компьютере это работает с помощью команды

while read p; do cp --parents $p /some/root/directory ; done < filelist.txt

Однако для удаленных компьютеров, использующих scp этот вариант --parents больше не работает Также rsync не создает родительский каталог, если он отсутствует. Кто-нибудь знает решение?

1 ответ

Решение

С помощью rsync:

rsync -av --files-from=filelist.txt . remote:/some/location/

Запустите это из каталога, в котором вы запустили findкорень каталогов, где filelist.txt в настоящее время

--files-from читает файлы (разделенные новой строкой) для копирования из файла filelist.txt,

--files-from всегда следует использовать относительный путь (в отличие от непосредственного упоминания), хотя вы можете явно указать это:

rsync -av --relative --files-from=filelist.txt . remote:/some/location/
Другие вопросы по тегам