linux区分为仅输出文件名而不输出其他文件名
我试图让diff只输出修改文件的名称。 我尝试使用-q选项,但它仍然给了我太多的输出: 我现在得到的是:linux区分为仅输出文件名而不输出其他文件名,linux,diff,Linux,Diff,我试图让diff只输出修改文件的名称。 我尝试使用-q选项,但它仍然给了我太多的输出: 我现在得到的是: files path/to/file1/file1 and path/to/file2/file2 are different 我希望: path/to/file1/file1 关于如何做到这一点,你有什么想法吗?你可以通过管道将其传送到其他地方,例如: # diff ... | sed 's/^files //;s/ and .*//;' 但是,请注意,如果您有一个包含文字和的文件,
files path/to/file1/file1 and path/to/file2/file2 are different
我希望:
path/to/file1/file1
关于如何做到这一点,你有什么想法吗?你可以通过管道将其传送到其他地方,例如:
# diff ... | sed 's/^files //;s/ and .*//;'
但是,请注意,如果您有一个包含文字和的文件,那么上述操作将导致问题。一般来说,我鼓励人们无论如何不要在文件名中使用空格。是的,您可以这样做,但它仍然会导致问题。您可以通过管道将其传输到其他地方,例如:
# diff ... | sed 's/^files //;s/ and .*//;'
但是,请注意,如果您有一个包含文字和的文件,那么上述操作将导致问题。一般来说,我鼓励人们无论如何不要在文件名中使用空格。是的,您可以这样做,但它仍然会导致问题。使用diff的退出状态:
if ! diff -q file1 file2 >/dev/null; then echo file1; fi
使用diff的退出状态:
if ! diff -q file1 file2 >/dev/null; then echo file1; fi
与韦斯的回答类似:
echo "files path/to/file1/file1 and path/to/file2/file2 are different" | sed -e "s/^files //" -e "s/ and .*$//"
与韦斯的回答类似:
echo "files path/to/file1/file1 and path/to/file2/file2 are different" | sed -e "s/^files //" -e "s/ and .*$//"
另一种选择是使用cmp-silent而不是diff-q。这不会向stdout发送任何信息,所以您只需要处理退出状态
例如:
file1=path/to/file1/file1; cmp --silent $file1 path/to/file2/file2 || echo $file1
如果输入相同,则cmp的退出状态与diff 0相同,如果输入不同,则退出状态与diff 1相同。另一个选项是使用cmp-silent而不是diff-q。这不会向stdout发送任何信息,所以您只需要处理退出状态
例如:
file1=path/to/file1/file1; cmp --silent $file1 path/to/file2/file2 || echo $file1
如果输入相同,cmp的退出状态与diff 0相同;如果输入不同,cmp的退出状态与diff 1相同。您可以执行以下操作:
差异-q文件1文件2 |切割-f2-d“
您可以:
差异-q文件1文件2 |切割-f2-d“
+1,尽管这不适用于diff-r;您必须将它与find结合起来,以在一个巨大的列表中检查每个文件。+1,尽管这不适用于diff-r;您必须将它与find结合起来,才能在一个巨大的列表中检查每个文件。