2016-06-21 33 views
0

每個具有幾個文件到子文件夾的一個多層次的子文件夾的數百個文件夾我有以下數據目錄:斯普利特其中有使用shell

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

而且我想把它轉換成以下文件結構:

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 

這樣做的目的是我想運行一些腳本,它取回主文件夾(root在這裏)並運行它。我想在許多文件夾(I,II)上並行運行它以加速此過程。

有關文件和文件夾名稱的簡單假設是所有文字都是字母數字,甚至沒有句點或下劃線。

編輯:我嘗試以下操作:

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 

問題是,它創建類似下面的,這不是我想要的。

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

那你知道哪個目錄進入'A'和成'乙'? –

+0

@BenjaminW。你是否意味着哪些目錄進入了我,哪些進入了II。我不太在意。我只是想讓他們平分秋色,比如30個小組。這樣我可以在30個文件夾上調用我的命令。 – Shweta

+1

如果我理解了這個問題,你可以沿着這些方向做一些事情:'a = 0;因爲我在$(ls);請讓a ++; [[$(($ a%60))-gt 30]] && mv $ i I || mv $ i II;完成' –

回答

1

您不妨使用一個鮮爲人知的命令調用dirsplit,通常的應用程序,它是一個目錄拆分成多個目錄燃燒的目的。

使用它象下面這樣:

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. 

欲瞭解更多信息,請參閱:

dirsplit -H