如何区分两个目录中的文件名(不写入中间文件)?


31

我正在尝试采取以下措施:

diff `ls -1a ./dir1` `ls -1a ./dir2`

但这出于明显的原因不起作用。有没有比这更好的方法(1行)呢?

ls -1a ./dir1 > lsdir1
ls -1a ./dir2 > lsdir2
diff lsdir1 lsdir2

谢谢

Answers:



10
diff -rq dir1 dir2

使用-r选项,遍历整个目录树,递归检查子目录和文件之间的差异,这些差异出现在每个树的可比较点。诀窍是使用-q选项禁止逐行比较


3
@festo:您遗漏了此问题的内容,我实际上不想比较文件的内容,我想要比较ls命令的输出
bguiz 2011年

+1,实际上,只有一个警告,我得到了相同的输出,diff -rq报告链接的文件为“没有这样的文件或目录”。因此,再加上一个用于正确且坦率地说更简单的用法。(即使IVA的回答是更好的“学习机会”来替代流程(> _ <)
xtian

1
这比散布文件名慢得多:必须读取并比较每个文件的整体。
2014年

当然@Josh,因为它确实递归....
Braiam

1
@Braiam:即使您递归地对文件名进行差异化(例如,rsync--dry-run选项一起使用),其速度仍然比快得多diff -r
Zaz 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.