
シナリオ:
- 2 つのメイン フォルダー。同じ名前のサブフォルダーがある可能性があります (重複する名前がわからないため、それを見つけようとしています)
- サブフォルダには他のファイルやサブフォルダが多数あるため、自動再帰機能を備えたツールは実際には選択肢になりません。
- 2つのメインフォルダの最初のレベルにある重複したサブフォルダ名だけを気にします
- サブフォルダの内容は関係ありません
- ファイルの内容は重要ではない
GUIを使用しようとしましたmeld
が、これらの構造を完了するのに非常に長い時間がかかります。
使用してみました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) )
配列を作成しますt/
2つのトップレベルディレクトリのディレクトリのails(ベース名)dir1
とdir2
(だotglobといいえullglob オプションが有効になっています)。
次に、フォームの拡張を使用して${name:*arrayname}
、両方の配列に存在する要素のみを保持できます。
% print -rC1 ${a:*b}
bar