
Szenario:
- 2 Hauptordner, die möglicherweise Unterordner mit denselben Namen haben (ich weiß nicht, welche Namen möglicherweise doppelt vorhanden sind, das ist es, was ich herauszufinden versuche)
- die Unterordner haben VIELE andere Dateien und Unterordner, daher sind Tools mit automatischer Rekursion keine wirkliche Option
- Mich interessieren nur doppelte Unterordnernamen auf der ersten Ebene der beiden Hauptordner
- Der Inhalt der Unterordner ist egal
- Der Inhalt der Dateien spielt keine Rolle
Ich habe versucht, meld
die GUI zu verwenden, aber das dauert bei diesen Strukturen einfach ewig.
Ich habe versucht, es zu verwenden diff --brief --report-identical-files folder1 folder2
, aber das meldet im Grunde alles und schließt nicht einmal die Ordner ein, sodass ich nicht einmal kann | grep identical
.
Benutze ich die falschen Werkzeuge? Oder gibt es einen Trick, den ich nicht verstanden habe diff --help
? Oder mache ich etwas falsch?
Danke
Antwort1
Ich würde ein einfaches verwenden find
:
find "/path/to/main1" "/path/to/main2" -mindepth 1 -maxdepth 1 -type d -printf '%f\n' | sort | uniq -d
Oder machen Sie es nullterminiert, um Probleme mit Zeilenumbruchzeichen zu vermeiden:
find "/path/to/main1" "/path/to/main2" -mindepth 1 -maxdepth 1 -type d -printf '%f\0' | sort -z | uniq -zd | xargs -0
Antwort2
Mit zsh
, gegeben
% tree dir1 dir2
dir1
├── bar
└── foo
└── baz
dir2
├── bar
│ └── baz
└── baz
6 directories, 0 files
Dann
% a=( dir1/*(/ND:t) ) ; b=( dir2/*(/ND:t) )
erstellt Arrays derTails (Basisnamen) von Verzeichnissen /
in den beiden Top-Level-Verzeichnissen dir1
und dir2
(mitDotglob undNullglob-Optionen aktiviert).
Dann können wir eine Erweiterung des Formulars verwenden ${name:*arrayname}
, um nur die Elemente beizubehalten, die in beiden Arrays vorhanden sind:
% print -rC1 ${a:*b}
bar