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 的输出?
这可以用 来完成xargs
,但我更喜欢在 bash 中使用while read
。
find . -type f | grep -v .svn | sed 's/.*/& remotehostname:&/' | xargs -n2 diff
Run Code Online (Sandbox Code Playgroud)
sed 命令复制输入并进行您需要的任何修改。然后 xargs 将输入diff
一次传递给两个。如果任何文件名包含空格,这将不起作用。
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,并且循环退出。
请注意,将事物输送到循环中会产生一些有趣的副作用,这些副作用与此处无关,但有一天可能会咬伤您。