使用xargs参数两次

时间:2015-09-09 10:28:07

标签: sed remote-access xargs

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

文件位置如下: File1在本地机器上 ./remotehostname/home/a/b/scripts/xyz.cpp

远程机器上的File2 的remotehostname:/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 % 

我需要更改%以获取remotehost并比较该文件。 不确定如何在%上应用sed。或者有更好的方法来比较这些文件。

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

1 个答案:

答案 0 :(得分:3)

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

xargs方法

find . -type f | grep -v .svn | sed 's/.*/& remotehostname:&/' | xargs -n2 diff

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

bash方法

find . -type f | grep -v .svn | while read line; do
    diff "$line" "remotehostname:$line"
done

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

请注意,将事物循环到循环中的some interesting side effects与此处不相关,但有一天可能会咬你。