![如何仅在第一级的两个文件夹中找到相同的子文件夹?](https://linux22.com/image/943218/%E5%A6%82%E4%BD%95%E4%BB%85%E5%9C%A8%E7%AC%AC%E4%B8%80%E7%BA%A7%E7%9A%84%E4%B8%A4%E4%B8%AA%E6%96%87%E4%BB%B6%E5%A4%B9%E4%B8%AD%E6%89%BE%E5%88%B0%E7%9B%B8%E5%90%8C%E7%9A%84%E5%AD%90%E6%96%87%E4%BB%B6%E5%A4%B9%EF%BC%9F.png)
设想:
- 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