如何仅在第一级的两个文件夹中找到相同的子文件夹?

如何仅在第一级的两个文件夹中找到相同的子文件夹?

设想:

  • 2 个主文件夹,可能有同名的子文件夹(我不知道哪些名称可能会重复,这就是我想查找的)
  • 子文件夹中有许多其他文件和子文件夹,因此具有自动递归功能的工具实际上不是一个选择
  • 我只关心两个主文件夹第一级的重复子文件夹名称
  • 子文件夹的内容不重要
  • 文件的内容并不重要

我尝试使用meldGUI,但这需要花费无数的时间来完成这些结构。

我尝试使用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(基本名称)dir1dir2(与otglob 和ullglob 选项已启用)。

然后我们可以使用形式的扩展${name:*arrayname}来仅保留两个数组中都存在的元素:

% print -rC1 ${a:*b}
bar

相关内容