linux diff只输出文件名而没有别的

时间:2012-02-27 14:28:38

标签: linux diff

我正在尝试让diff只输出修改过的文件的名称。 我试图使用-q选项,但它仍然给我太多的输出:

我现在得到的是:

files path/to/file1/file1 and path/to/file2/file2 are different

我想这样:

path/to/file1/file1

关于如何做到这一点的任何想法?

5 个答案:

答案 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)。