rsync nur bestimmte Dateitypen in Unterverzeichnissen mit einer festen maximalen Tiefe

rsync nur bestimmte Dateitypen in Unterverzeichnissen mit einer festen maximalen Tiefe

Ich möchte alle *.sh-Dateien in genau einem Unterverzeichnis synchronisieren. Ich habe diesen Befehl ausprobiert, aber es werden alle Dateien in einem Verzeichnis synchronisiert, anstatt nur bestimmte Dateitypen.

rsync -vr -n --include="*.sh" --exclude="*/*/" --prune-empty-dirs /source /target

Ich habe auch versucht, einen Filter hinzuzufügen wie

--filter="+ *.sh"

aber das hat das Ergebnis nicht verändert. Ein anderer Filter

rsync -vr -n --include="*.sh" --filter="-! *.sh" --exclude="*/*/" --prune-empty-dirs

gibt mir eine leere Liste. Wenn ich "*" ausschließe, schließe ich auch "*.sh" aus... Was ist falsch? Danke!

Die Tiefe sollte eins sein - der Name des Unterverzeichnisses ist nicht bekannt. Beispiel:

home/subdirectory1/subsubdirectory/subsubsubdirectory/file.sh
home/subdirectory1/file1.sh
home/subdirectory2/file2.sh
home/subdirectory3/file

Im obigen Beispiel rsyncsollte in Home, Sync Verzeichnishierarchie und nur die Dateien file1.shundfile2.sh

Antwort1

Ihre Beispiele scheinen nicht mit Ihrer Beschreibung übereinzustimmen. Ich denke, Sie wollen Folgendes:

  • alle *.shDateien in einem unbekannten Unterverzeichnis direkt unter Ihrem/home
  • Legen Sie die Dateien in das unbekannte Unterverzeichnis auf dem Ziel
  • nicht /homein den Zielpfad einschließen

Von aus betrachtet /homegleicht dieser Befehl alle Dateien ab */*.shund kopiert sie und ihre Teilpfade zum Ziel. (Entfernen Sie das , --dry-runwenn Sie mit dem gewünschten Ergebnis zufrieden sind.)

rsync --dry-run -avR /home/./*/*.sh /target

Beispielsweise /home/subdir/file.shwird kopiert nach/target/subdir/file.sh

verwandte Informationen