创建父文件夹时将文件列表复制到远程计算机

创建父文件夹时将文件列表复制到远程计算机

我有一个位于子目录中的文件列表,这些文件是通过调用以下命令创建的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/

相关内容