如何使用scp与xargs?

3

我正在尝试将一个非常大的文件从一个主机移动到另一个主机。另外,文件名太长了,所以我必须使用xargs。所有子目录也需要被复制。

我正在源主机当前目录中使用以下命令:

find . -name "*" -type f -print0 | xargs -0 scp -r UserName@host:/path/to/destination

但是它抛出了以下错误
scp: /path/to/destination: not a regular file
1个回答

8

在目的地之前使用{}来放置源文件名。这是新命令:

find . -name "*" -type f -print0 | xargs -0 -I {} scp -r {} UserName@host:/path/to/destination

差不多了,但我需要子目录也被复制...但现在只有子目录的内容被移动了。其次,每次复制一个文件时,命令都会要求输入密码。有什么解决办法吗? - Anirban Nag 'tintinmj'
如果您想要复制目录,则从find命令中删除-f参数。如果您不想一直输入密码,请将您的公共ssh id添加到远程机器,并使用ssh-agent将您的密钥存储在运行该命令的机器上。 - Peter Skarpetis
所以我移除了 -f,但是子目录的文件会被复制两次。一次在 /path/to/destination,另一次在 /path/to/destination/source_folder/。希望您能理解我的问题。 - Anirban Nag 'tintinmj'
这似乎是一个完全不同的问题。您应该发布另一个问题,详细说明您的问题并提供示例,然后有人会回答它。 - Peter Skarpetis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接