【问题标题】:Split a folder which has 100s of subfolders with each having few files into one more level of subfolder using shell使用 shell 将一个包含 100 个子文件夹的文件夹拆分为一个多级子文件夹,每个子文件夹只有很少的文件
【发布时间】: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


【解决方案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

【讨论】:

    猜你喜欢
    • 2017-05-20
    • 1970-01-01
    • 1970-01-01
    • 2015-05-23
    • 1970-01-01
    • 2018-05-29
    • 2018-08-09
    • 1970-01-01
    • 2015-05-20
    相关资源
    最近更新 更多