我想将 find 的输出通过管道传输到 scp 的输入列表中,如何?

pho*_*uci 11 linux scp find pipe

我是一个 linux 新手用户,我试图将一长串文件从一台计算机发送到另一台计算机。参数列表太长,所以我使用了 find。但是,我在设置表达式时遇到了麻烦。有人可以帮忙吗?

这是我通常为简短的参数列表键入的内容。

scp ./* phogan@computer/directory...
Run Code Online (Sandbox Code Playgroud)

这是我认为这可能会转化为 find 。

scp find . -name "*" phogan@computer/directory...
Run Code Online (Sandbox Code Playgroud)

也许我可以使用管道?任何建议都会有所帮助。提前致谢。

Car*_*ues 18

只需一个命令即可完成scp

  • 对于较新版本的scp
scp `find <path> -name <expression>` user@host:<path_where_to_copy>
Run Code Online (Sandbox Code Playgroud)
  • 对于旧版本:
scp --exec=`find <path> -name <expression>` user@host:<path_where_to_copy>
Run Code Online (Sandbox Code Playgroud)

确保将find命令封装在反引号 `而不是单引号' 之间

  • 嗨,旧版本支持,新版本支持更简单的命令:``scp `find &lt;path&gt; -name &lt;expression&gt;` user@host:&lt;path_where_to_copy&gt;`` (2认同)

aki*_*ira 17

find . -name "*" -exec scp '{}' phogan@computer:/directory ';'
Run Code Online (Sandbox Code Playgroud)

通常我会将所有文件“tar”到一个巨大的 blob 中,然后只调用一次“scp”。像这样的东西:

tar czfv - file1 file2 dir1 dir2 | ssh phogan@computer/ tar xvzf - -C directory
Run Code Online (Sandbox Code Playgroud)
  • 可以使用 tar 的 --exclude= 或 --include= 参数。
  • 另一种选择是使用rsync