Скопируйте список файлов на удаленный компьютер при создании родительских папок.
У меня есть список файлов, лежащих в подкаталогах, которые я создал, вызвав 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/