如何使用 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