有没有find一个目录中的所有文件不在另一个目录中的Linux / Unix工具? 基本上我正在寻找在ls的输出上工作的diff。
简短和甜美的脚本也表示赞赏。
diff
已经这样做了:
diff dir1 dir2
示例输出:
Only in dir1: some_file.txt Only in dir1: some_other_file.txt Only in dir2: third_file.txt
击:
diff <(cd dir1; ls) <(cd dir2; ls)
只比较文件名 – 而不是文件的内容。
就像人们在这里告诉你的,你可以在不同的使用方式中使用DIFF。 或者你只是使用dirdiff
而不是你想要的! 🙂
但是,如果你想保持一些目录同步,那么你真的应该看看rsync
。
问候
for i in $(ls -1 directory1); do if (test -f directory2/$i) then echo $i; fi; done
如果你想通过所有的子目录来做到这一点,一个好办法是:
diff --brief -r dir1/ dir2/
我更喜欢使用简短的,但是如果你愿意的话,你可以不要。
这工作..
ls -a1 /dir1 | sort > /tmp/1 ls -a1 /dir2 | sort > /tmp/2 diff /tmp/1 /tmp/2
未经testing:
find /dir/A -printf "%P" | while read f; do if [ ! -e "/dir/B/$f" ]; then echo $f fi done
丹尼斯·威廉姆森有一个很好的答案 ,但我需要recursion地做到这一点。 GNU findutils 4.7.0不sorting它的输出,所以这就是我使用的
diff <(cd $dir1; find | sort) <(cd $dir2; find | sort)
要做到这一点只有一个办法,并产生一个文件列表,我用这个:
diff <(cd $dir1; find | sort) <(cd $dir2; find | sort) \ | grep '< ./' | sed "s,< ./,$dir1/,"
为了正常工作,$ dir1和$ dir2都不应该包含结尾的斜杠。