Verschieben Sie mehrere Dateien aus mehreren Verzeichnissen an ein quellrelatives Ziel

Verschieben Sie mehrere Dateien aus mehreren Verzeichnissen an ein quellrelatives Ziel

Mit der folgenden Dateihierarchie:

dir
├── dirA
│   └── snapshot
│       └── subdir1
│           └── file1
└── dirB
    └── snapshot
        └── subdir2
            └── file2

Ich möchte Dateien aus jedem Snapshot/Unterverzeichnis mit einem einzigen Befehl in das übergeordnete Verzeichnis des Snapshots verschieben. Das wäre:

dir
├── dirA
│   └── file1
│   └── snapshot
│       └── subdir1
└── dirB
    └── file2
    └── snapshot
        └── subdir2

Ich habe es versucht mv dir/*/snapshot/*/* ../../, aber da der Zielteil ../../relativ zum Arbeitsverzeichnis ist, funktioniert es offensichtlich nicht.

Ist dies mit Bash-Befehlen möglich (da ich noch nie eine einzige Zeile eines Bash-Skripts geschrieben habe)?

Antwort1

Aufgrund der aufmerksamen Beobachtung von @Don_Christ wurde diese Antwort bearbeitet, wodurch eine Untershell eingespart wurde:

for i in dir/*/snapshot; do
     mv "$i"/*/* "$i"/..
done

verwandte Informationen