2016-06-21 13 views
0

mit Schale Ich habe eine folgende Daten dir:Split ein Ordner, die 100s von Unterordner mit denen jeder einige Dateien in eine weitere Ebene der Unterordner

root/A/1 
root/A/2 
root/B/1 
root/B/2 
root/B/3 
root/C/1 
root/C/2 

Und ich will es in folgende Dateistruktur konvertieren:

root2/I/A/1 
root2/I/A/2 
root2/I/B/1 
root2/I/B/2 
root2/I/B/3 
root2/II/C/1 
root2/II/C/2 

Zweck des Tuns ist es, ich möchte ein Skript ausführen, die Home-Ordner (Root hier) und läuft darauf. Und ich möchte es auf vielen Ordnern (I, II) parallel ausführen, um den Prozess zu beschleunigen.

Einfache Annahme über Datei-und Ordnername ist, dass alle alphanumerisch sind, auch keine Periode oder Unterstrich.

Edit: Ich habe versucht, folgende:

for i in `seq 1 30`; do mkdir -p "root2/folder$i"; find root -type f | head -n 4000 | xargs -i cp "{}" "root2/folder$i"; done 

Problem ist, dass es so etwas wie folgt erstellt, das nicht das, was ich wollte.

root2/I/1 
root2/I/2 
root2/I/1 
root2/I/2 
root2/I/3 
root2/II/1 
root2/II/2 
+0

Und wissen Sie, welche Verzeichnisse gehen in 'A' und die in' B '? –

+0

@BenjaminW. hast du gemeint, welche Verzeichnisse in I und welche in II gehen. Es interessiert mich nicht besonders. Ich möchte nur, dass sie gleichmäßig verteilt sind, sagen wir in 30 Gruppen. Damit ich meinen Befehl in 30 Ordnern aufrufen kann. – Shweta

+1

Wenn ich die Frage verstanden habe, können Sie etwas in diese Richtung tun: 'a = 0; für i in $ (ls); Lass a ++; [[$ (($ a% 60)) -gt 30]] && mv $ i I || mv $ i II; done' –

Antwort

1

können Sie einen weniger bekannten Befehl dirsplit, die übliche Anwendung von denen genannt verwenden ist für das Brennen Zwecke ein Verzeichnis in mehrere Verzeichnisse zu spalten.

Verwenden Sie es wie unten:

dirsplit -m -s 300M /root/ -p /backup/folder1 

Options implies below stuff : 
-m|--move  Move files to target dirs 
-e 2 special exploration mode, 2 means files in directory are put together 
-p prefix to be attached to each directory created, in you case I, II etc 
-s Maximum size allowed for each new folder created. 

Weitere Informationen finden Sie unter:

dirsplit -H 

Verwandte Themen