2016-06-30 6 views
2
/volume1/TVPack/A/Folder1/Folder11/ --> files 
/volume1/TVPack/A/Folder2/Folder22/ --> files 
/volume1/TVPack/B/Folder3/Folder33/ --> files 
(the list goes on)... 

Ich möchte alle Dateien aus Folder11/22 bewegen/volume1/TVPack/A und alle Dateien von Folder33 zu/volume1/TVPack/B etc dh bewegen 2 Ebenen bisBash - verschieben Sie alle Dateien aus Unterverzeichnissen zu Ordnern

Der Code, den ich verwende ist

find /volume1/TVPack/*/ -type f -mindepth 3 -exec mv -- {} /volume1/TVPack/*/ \; 

Aber diese setzen alle Dateien nur in Ordner B, statt die entsprechenden Dateien auf A setzen und die respectives Dateien B.

ich diese Scheduler auf eine Aufgabe zu tun, so dass ich denke, dass ich kann nicht verwendet mv * .[^.]*

Weiß jemand, wie es geht?

Antwort

2

Verwenden Sie -execdir, welche CD zu dem Verzeichnis, in dem sich jede Datei befindet, bevor der Befehl ausgeführt wird.

find /volume1/TVPack/*/ -type f -mindepth 3 -execdir mv -- {} ../../ \; 

Noch besser ist, verwenden + statt \; die Anzahl der mv Befehle zu minimieren.

find /volume1/TVPack/*/ -type f -mindepth 3 -execdir mv -t ../../ -- {} + 
Verwandte Themen