Ursprünglicher Pfad, RootFolderI:
RootFolderI/FolderA/Subfolder1/Subsub1/JPG1.jpg -> want this jpg
RootFolderI/FolderA/Subfolder2/Subsub1/JPG2.jpg -> want this jpg
RootFolderI/FolderA/Subfolder2/Subsub2/JPG3.jpg
. . .
RootFolderI/FolderB/Subfolder1/Subsub1/JPG4.jpg -> want this jpg
RootFolderI/FolderB/Subfolder2/Subsub1/JPG5.jpg -> want this jpg
RootFolderI/FolderB/Subfolder3/Subsub2/JPG6.jpg
...
Es gibt viele Ordner (OrdnerA/B/C/usw.), aber die Struktur der Ordner darin ist immer gleich (außer den Dateien, diese sind unterschiedlich).
Ich möchte kopieren nach RootFolderII
:
- nur alle Ordner A/B/usw.
- alle Dateien in Subsub1
...Das Ergebnis ist dieser neue Pfad, RootFolderII:
RootFolderII/FolderA/ with JPG1.jpg, JPG2.jpg
RootFolderII/FolderB/ with JPG4.jpg,JPG5.jpg
Ich habe im Moment den folgenden Code (aber er funktioniert nicht):
rsync -r --include='Folder*/Subfolder1/Subsub1/***' --exclude="/*/*/" /RootFolderI/ /RootFolderII/
Wo
--exclude="/*/*/"
: erstellt OrdnerA/B/... -> funktioniert
--include='Folder*/Subfolder1/Subsub1/***'
: ich möchte alle Dateien kopieren (nicht die Struktur) ... -> es funktioniert nicht
???
also, ich glaube, selbst wenn es funktionieren würde, würde es Dateien von OrdnerB nach OrdnerA kopieren, und das will ich nicht!
Antwort1
Probieren Sie es aus.
rsync -r --include='*.jpg' --exclude="*" /RootFolderI/Folder*/Subfolder1/Subsub1/. /RootFolderII/.
Antwort2
Was ich getan habe:
rsync
mit Einschlüssen und AusschlüssenDateien nach oben verschieben (2 Ebenen nach oben)
find /folder/ -type f -mindepth 3 -execdir mv -t ../../ -- {} +
Leere Ordner löschen
find /folder/*/ -type d -empty -delete
Antwort3
Ich glaube nicht, dass ich es rsync
für diese Aufgabe verwenden würde. (Es gibt keinen Delta-Algorithmus, daher ist der Nutzen bei der Verwendung gering.) Hier ist eine Version mit cp
:
for rfipath in RootFolderI/*
do
folder="${rfipath/*\/}"
mkdir -p "RootFolderII/$folder"
cp -p "$rfipath"/*/Subsub1/* "RootFolderII/$folder"
done
Ausgabe
RootFolderII/FolderA/JPG1.jpg
RootFolderII/FolderA/JPG2.jpg
RootFolderII/FolderB/JPG4.jpg
RootFolderII/FolderB/JPG5.jpg
Wenn Sie wirklich verwenden möchten rsync
, ersetzen Sie die cp
Zeile durch diese. Sie erhalten dann die Änderungszeiten für die Verzeichnisse:
for folder in RootFolderI/*
do
rsync -a "$folder"/*/Subsub1/ "RootFolderII/${folder/*\/}"
done