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