Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
linux区分为仅输出文件名而不输出其他文件名_Linux_Diff - Fatal编程技术网

linux区分为仅输出文件名而不输出其他文件名

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 .*//;' 但是,请注意,如果您有一个包含文字和的文件,

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

我现在得到的是:

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结合起来,才能在一个巨大的列表中检查每个文件。