我有两个文件夹,每个文件夹包含很多子文件夹。大多数文件和文件夹应该是相同的,但我希望能够找出丢失的文件夹。
例如:
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"被删除了?我正在运行Windows,但我已经安装了cygwin,因此bash脚本,diff或python / perl可以正常工作。
我知道我可以" diff -q -r Folder1 Folder2"两个文件夹中的所有内容,但这需要FOREVER并吐出所有更改的内容,包括那些文件夹中的文件,我只需要文件夹本身。
有什么建议吗?
谢谢!
答案 0 :(得分:3)
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 */
) 答案 1 :(得分:2)
(cd Folder1 && find . -type d >/tmp/$$.1)
(cd Folder2 && find . -type d >/tmp/$$.2)
diff /tmp/$$.1 /tmp/$$.2
rm /tmp/$$.1 /tmp/$$.2
答案 2 :(得分:1)
这就是我在bash中一起攻击它的方式:
dirs=`ls $PWD/Folder1`
for dir in ${dirs[*]}; do
if [ ! -e $PWD/Folder2/$dir ]; then
echo "$dir missing"
fi
done
我没有声称这是一个理想的解决方案,但由于我也在学习bash,我很想知道为什么这是一个特别好或坏的方法。
答案 3 :(得分:1)
如果你真的只想要一个级别的嵌套,你可以这样做:
(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
如果您确定只在两个文件夹中都有目录,请使用简单的find
替换ls
命令。