我正在尝试让diff只输出修改过的文件的名称。 我试图使用-q选项,但它仍然给我太多的输出:
我现在得到的是:
files path/to/file1/file1 and path/to/file2/file2 are different
我想这样:
path/to/file1/file1
关于如何做到这一点的任何想法?
答案 0 :(得分:3)
使用diff:
的退出状态if ! diff -q file1 file2 >/dev/null; then echo file1; fi
答案 1 :(得分:3)
你可以这样做:
diff -q file1 file2 | cut -f2 -d' '
答案 2 :(得分:1)
您可以随时将其传播到其他内容,例如:
# diff ... | sed 's/^files //;s/ and .*//;'
但是,请注意,如果您的文件中包含文字“和”,则上述操作会导致问题。一般来说,我鼓励人们不要在文件名中使用空格。是的,你可以做到,但是它仍然会导致问题。
答案 3 :(得分:1)
与Wes的答案相似:
echo "files path/to/file1/file1 and path/to/file2/file2 are different" | sed -e "s/^files //" -e "s/ and .*$//"
//output
path/to/file1/file1
答案 4 :(得分:1)
另一种选择是使用cmp --silent
代替diff -q
。这不会向stdout发送任何内容,因此您只需要处理退出状态。
例如:
file1=path/to/file1/file1; cmp --silent $file1 path/to/file2/file2 || echo $file1
cmp的退出状态与diff相同(如果输入相同则为0,如果不同则为1)。