设想:
- 2 个主文件夹,可能有同名的子文件夹(我不知道哪些名称可能会重复,这就是我想查找的)
- 子文件夹中有许多其他文件和子文件夹,因此具有自动递归功能的工具实际上不是一个选择
- 我只关心两个主文件夹第一级的重复子文件夹名称
- 子文件夹的内容不重要
- 文件的内容并不重要
我尝试使用meld
GUI,但这需要花费无数的时间来完成这些结构。
我尝试使用diff --brief --report-identical-files folder1 folder2
,但基本上报告了所有内容,它甚至不包括文件夹,所以我甚至不能| grep identical
。
我使用的工具不对吗?还是有什么技巧我没有学到diff --help
?还是我做错了什么?
谢谢
答案1
我会用一个简单的find
:
find "/path/to/main1" "/path/to/main2" -mindepth 1 -maxdepth 1 -type d -printf '%f\n' | sort | uniq -d
或者使其以零终止,以防止出现换行符问题:
find "/path/to/main1" "/path/to/main2" -mindepth 1 -maxdepth 1 -type d -printf '%f\0' | sort -z | uniq -zd | xargs -0
答案2
使用zsh
,给定
% tree dir1 dir2
dir1
├── bar
└── foo
└── baz
dir2
├── bar
│ └── baz
└── baz
6 directories, 0 files
然后
% a=( dir1/*(/ND:t) ) ; b=( dir2/*(/ND:t) )
创建数组吨/
两个顶级目录中目录的 ails(基本名称)dir1
和dir2
(与德otglob 和否ullglob 选项已启用)。
然后我们可以使用形式的扩展${name:*arrayname}
来仅保留两个数组中都存在的元素:
% print -rC1 ${a:*b}
bar