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
Und wissen Sie, welche Verzeichnisse gehen in 'A' und die in' B '? –
@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
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' –