Wie findet man dieselben Unterordner in zwei Ordnern nur auf der ersten Ebene?

Wie findet man dieselben Unterordner in zwei Ordnern nur auf der ersten Ebene?

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, melddie 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 dir1und 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

verwandte Informationen