在另一个目录中查找文件

有没有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都不应该包含结尾的斜杠。