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.php
oder 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 ls
in 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.