den Satz gemeinsamer Dateien zwischen mehreren Verzeichnissen finden?

den Satz gemeinsamer Dateien zwischen mehreren Verzeichnissen finden?

Ich möchte Verzeichnisse mit Drupal-Themes vergleichen. Ein Drupal-Theme ist ein Verzeichnis, das aus mehreren Dateien besteht, und ich versuche herauszufinden, welche davon wichtig sind. Sie könnten beispielsweise alle eine Datei mit dem Namen template.phpoder enthalten page.tpl.php.

Wie kann ich die Menge aller gemeinsamen Dateien für mehrere Verzeichnisse finden? In meinem Fall befinden sich alle „gleichen“ Dateien (die mit dem gleichen Namen) im Verzeichnis auf derselben Ebene.

Antwort1

Listet alle Namen (nicht Pfade) der in allen Verzeichnissen gemeinsamen Dateien auf.

dirs=( "A dir" "B dir" "C dir" "D dir" )
find "${dirs[@]}" -maxdepth 1 -type f -name "*" -printf '%f\n' |
  sort | uniq -c | sed -n "s/^ *${#dirs[@]} //p"

Oder rufen Sie es als Skriptdatei oder Funktion auf, mit den Verzeichnissen als Parameter.

find "$@" -maxdepth 1 -type f -name "*" -printf '%f\n' |
  sort | uniq -c | sed -n "s/^ *$# //p"

Antwort2

Sie können eine Liste der Namen anzeigen, sortiert nach der Anzahl der Verzeichnisse, in denen sie vorkommen.

find */ |              # traverse all the template directories
sort -t / -k 2 |       # sort, ignoring the first field
tr '/' '\t' |          # turn / into tabs
uniq -f 1 -c |         # count duplicates, ignoring the first field
tr '\t' '/' |          # turn tabs back into /
sort -t / -s -k 1n     # sort by the number of occurrences

Antwort3

MitMeldenSie können zwei Verzeichnisse vergleichen und sehen, welche Dateien in einem Verzeichnis vorhanden sind und in dem anderen nicht und umgekehrt. Es können auch die Unterschiede zwischen den gemeinsamen Dateien angezeigt werden.

Antwort4

Für 3 Verzeichnisse, eines davon das aktuelle und zwei ‚a‘ und ‚b‘, können Sie den Test folgendermaßen verketten:

ls a/$(ls b/$(ls *.php) 2>/dev/null) 2>/dev/null

wenn die Dateien ein gemeinsames Muster (wie .php) haben und keine Leerzeichen in den Dateinamen enthalten.

Die Verwendung lsin Skripten ist immer problematisch und ich rate normalerweise von der Verwendung ab. Wenn Sie jedoch einen Überblick über alle Dateien im Verzeichnis haben, in dem die Suche beginnt, und dieses weder Leerzeichen noch Sonderzeichen wie „*“ oder „?“, „<“ oder „|“ enthält, sollte die Verwendung sicher sein.

verwandte Informationen