我有两个包含大量子文件夹的文件夹。 大多数文件和文件夹应该是相同的,但我想能够找出哪些文件夹丢失。
例如:
Folder1/ A/ 1.jpg B/ 2.jpg C/ 3.jpg D/ 4.jpg
和
Folder2/ A/ 1.jpg E/ 2.jpg C/ 3.jpg D/ 4.jpg
有什么方法可以知道“B”被删除了吗? 我正在运行窗口,但我已经安装了cygwin所以bash脚本,diff或python / perl将工作。
我知道我可以只是“diff -q -r Folder1 Folder2”在这两个文件夹中的一切,但这需要永远,并吐出一切改变,包括在这些文件夹中的文件,我只需要文件夹本身。
有什么build议么?
谢谢!
diff -u <(cd Folder1 ; find | sort) <(cd Folder2 ; find | sort)
一些说明:
find
来find -type d
,正如herby所暗示的那样。 | perl -ne 'print unless m/^\Q$previous\E\//; $previous = $_;'
。 find
来find -maxdepth 1
(或者find -maxdepth 1 -type d
)或者ls -d *
(或者ls -d */
)。 (cd Folder1 && find . -type d >/tmp/$$.1) (cd Folder2 && find . -type d >/tmp/$$.2) diff /tmp/$$.1 /tmp/$$.2 rm /tmp/$$.1 /tmp/$$.2
这就是我在bash中一起砍死它的原因:
dirs=`ls $PWD/Folder1` for dir in ${dirs[*]}; do if [ ! -e $PWD/Folder2/$dir ]; then echo "$dir missing" fi done
我不认为这是一个理想的解决方案,但是因为我也在学习bash,所以我很想知道为什么这是一个特别好或坏的方法去做。
如果你真的只想要一层嵌套,你可以这样做:
(cd Folder1 && find -type d -mindepth 1 -maxdepth 1) >list1 (cd Folder2 && find -type d -mindepth 1 -maxdepth 1) >list2 while read dir; do fgrep -qx "$dir" list2 || echo "\"$dir\" has been deleted" done <list1
如果您确定只有两个文件夹中都有目录,请用简单的ls
替换find
命令。