【发布时间】:2016-06-21 13:42:37
【问题描述】:
我有以下数据目录:
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
这样做的目的是我想运行一些脚本,它将主文件夹(此处为根目录)并在其上运行。我想在许多文件夹(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
【问题讨论】:
-
你知道哪些目录进入
A,哪些进入B? -
@BenjaminW。你的意思是哪些目录进入I,哪些进入II。我不太在意它。我只是希望他们平分,比如分成 30 组。这样我就可以在 30 个文件夹上调用我的命令。
-
如果我理解了这个问题,您可以按照以下方式进行操作:
a=0; for i in $(ls); do let a++; [[ $(($a % 60)) -gt 30 ]] && mv $i I || mv $i II; done -
@Uno,你能解释一下你想在这里做什么。为了更清楚,我已经编辑了我的问题。
-
@Shweta 没有太多时间,所以我很快写了它来将顶级文件夹分派到 2 个组中,将它们 30 x 30,但问题不是 100% 清楚,所以我只是添加了一个评论。
标签: bash shell directory file-structure