用于创建目录结构的 Linux 脚本



我正在尝试为图像上传创建一个目录结构,如下所述,结果应如下所示:

upload/
      00/00/00/
...
      00/00/ff/
...   
      00/ff/ff/
...   
      ff/ff/ff/

所以我写了扁平的python脚本:

ROOT = '/var/upload'
for a in xrange(0, 256):
    for b in xrange(0, 256):
        for c in xrange(0, 256):
            os.makedirs(os.path.join(ROOT, format(a, '02x'), format(b, '02x'), format(c, '02x')))

并得到:

...
    os.makedirs(os.path.join(ROOT, format(a, '02x'), format(b, '02x'), format(c, '02x')))
File "/usr/lib64/python2.7/os.py", line 157, in makedirs
    mkdir(name, mode)
OSError: [Errno 28] No space left on device: '/var/upload/2e/04/cd'

我尝试了其他位置 - "/opt/upload",结果相同。但是有足够的空间,没有配额:

[root@sky /]# df
/dev/mapper/rfremix_sky-root  51475068     23006628  25830616           48% /
devtmpfs                       2016520            0   2016520            0% /dev
tmpfs                          2024048         2064   2021984            1% /dev/shm
tmpfs                          2024048          500   2023548            1% /run
tmpfs                          2024048            0   2024048            0% /sys/fs/cgroup
tmpfs                          2024048           32   2024016            1% /tmp
/dev/sda1                       487652        90139    367817           20% /boot
/dev/mapper/rfremix_sky-home 424460680     47830948 355045248           12% /home
[root@sky /]# repquota /
repquota: Mountpoint (or device) / not found or has no quota enabled.
repquota: Not all specified mountpoints are using quota.
[root@sky /]#

系统:

[root@sky /]# uname -a
Linux sky.dep1 3.12.10-300.fc20.x86_64 #1 SMP Thu Feb 6 22:11:48 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
[root@sky /]# python --version
Python 2.7.5
[root@sky /]#

所以,问题:我做错了什么?

或者也许在bash,perl等上还有其他解决方案,性能更好(256**3 = 16.777.216文件夹)?

更新(托马斯·奥罗斯科):

[root@sky /]# df -i
Файловая система                Iнодов IИспользовано IСвободно IИспользовано%     Cмонтировано в
/dev/mapper/rfremix_sky-root   3276800       3276800         0           100% /
devtmpfs                        504130           422    503708             1% /dev
tmpfs                           506012            13    505999             1% /dev/shm
tmpfs                           506012           504    505508             1% /run
tmpfs                           506012            13    505999             1% /sys/fs/cgroup
tmpfs                           506012            41    505971             1% /tmp
/dev/sdb3                    164849116         96453 164752663             1% /mnt/win
/dev/sda1                       128016           380    127636             1% /boot
/dev/mapper/rfremix_sky-home  26968064        218284  26749780             1% /home
tmpfs                           506012          4364    501648             1%         /home/chip/.chrome/ramdisk
[root@sky /]#

正如@Ricardo Cárdenes 所说 - 异常的原因 - 文件系统中索引节点数量的限制。在另一个具有足够索引节点的挂载点(在我的例子中为/home) - 这个脚本运行良好。

正如@Krumelur所说,对我来说合适的解决方案 - 根据需要创建目录。

谢谢大家!

最新更新