使用 xargs 参数两次

use*_*867 1 sed remote-access xargs

我需要检查本地文件是否与远程主机文件相同。

文件位置如下: File1 at Local machine ./remotehostname/home/a/b/scripts/xyz.cpp

远程计算机上的 File2 远程主机名:/home/a/b/scripts/xyz.cpp

我打算使用命令比较这两个文件

diff  ./remotehostname/home/a/b/scripts/xyz.cpp remotehostname:/home/a/b/scripts/xyz.cpp


 find . -type f | grep -v .svn |xargs -I % diff % 
Run Code Online (Sandbox Code Playgroud)

我需要更改 % 以获取远程主机并比较文件。不知道如何在 % 上应用 sed。或者有没有更好的方法来比较这些文件。

一种方法可能是保存文件列表,然后在该文件上应用 sed,但我认为应该有更好的方法。此外,差异在远程主机上不起作用,也许我需要使用干 rsync 的输出?

ams*_*ams 5

这可以用 来完成xargs,但我更喜欢在 bash 中使用while read

xargs方法

find . -type f | grep -v .svn | sed 's/.*/& remotehostname:&/' | xargs -n2 diff
Run Code Online (Sandbox Code Playgroud)

sed 命令复制输入并进行您需要的任何修改。然后 xargs 将输入diff一次传递给两个。如果任何文件名包含空格,这将不起作用。

bash方法

find . -type f | grep -v .svn | while read line; do
    diff "$line" "remotehostname:$line"
done
Run Code Online (Sandbox Code Playgroud)

bashread命令从 stdin 读取一行,将其放入名称变量 中,$line并返回 true。然后,您可以将任何您喜欢的内容放入循环中,这样您就可以完全自由地根据需要重写文件名。当输入用完时,read返回 false,并且循环退出。

请注意,将事物输送到循环中会产生一些有趣的副作用,这些副作用与此处无关,但有一天可能会咬伤您。