
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 rsync
sollte in Home, Sync Verzeichnishierarchie und nur die Dateien file1.sh
undfile2.sh
Antwort1
Ihre Beispiele scheinen nicht mit Ihrer Beschreibung übereinzustimmen. Ich denke, Sie wollen Folgendes:
- alle
*.sh
Dateien in einem unbekannten Unterverzeichnis direkt unter Ihrem/home
- Legen Sie die Dateien in das unbekannte Unterverzeichnis auf dem Ziel
- nicht
/home
in den Zielpfad einschließen
Von aus betrachtet /home
gleicht dieser Befehl alle Dateien ab */*.sh
und kopiert sie und ihre Teilpfade zum Ziel. (Entfernen Sie das , --dry-run
wenn Sie mit dem gewünschten Ergebnis zufrieden sind.)
rsync --dry-run -avR /home/./*/*.sh /target
Beispielsweise /home/subdir/file.sh
wird kopiert nach/target/subdir/file.sh