使用 coreutils 将文件拆分成不同的目录?

使用 coreutils 将文件拆分成不同的目录?

如何使用 GNU 的 coreutilssplit命令将一个大文件分割成每行 L 的块,但在创建每个不同的子文件时将它们放入不同的目录中?

现在我有一个 perl 脚本,它创建一个从到开始的目录层次结构./00/00/00./99/99/99并将每一行打印到脚本中的子文件中,但它比 GNU 的 split 命令慢得多,后者会在一个目录中创建所有子文件。我希望将它们放在目录层次结构中,因为这样以后我就可以更轻松地管理它们。

有任何想法吗?

答案1

该程序不支持此功能(根据信息和手册页)。最好的办法是在创建文件后移动它们。下一个最好的办法是添加此功能并将补丁邮寄给当前维护者。

第一个选项其实并不难,除非您使用网络挂载共享,否则速度不会太慢。考虑使用伪造的 reiserfs 分区来实现这一点:

dd if=/dev/zero of=folders.reserfs bs=1M seek=5000 count=0
losetup /dev/loop7 文件夹.reserfs
cfdisk /dev/loop7 #(创建 1 个主分区)
mkreiserfs /dev/loop7
mkdir 文件夹
sudo mount /dev/loop7 文件夹/ -o loop
光盘文件夹

$ 时间回显 {00..99}/{00..99}/{00..99} |tr'''\n'| xargs -L 10000 mkdir -p
时间:实际1m28.2s 用户0m9.9s 系统1m12.0s

使用类似命令移动文件(最好一次移动尽可能多的文件而不是一个一个地移动 - 使用通配符和 xargs -L):

for i in x*; do echo mv $i ${i:1:1}/${i:2:2} ;done

相关内容