2016-06-21 95 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