例子

例子

示例:假设我有 20 000 张图像,我需要将它们分组到文件夹中,以便将它们刻录到 CD(每个文件夹最大 700MB)。

一般:我有N个文件,我需要将它们分成M组,以便所有组的大小大致相同(尽可能接近)

分成 M 个组或分成大小为 M 的组...任何都可以

这似乎是一件很容易的事……但是,我该怎么做呢?

答案1

假设:您希望将包含数千个文件(总计超过 700MB)的文件夹拆分为每个 700MB 的单独目录 - 准备刻录到多张 CD 上。

在 Linux 上,您可以使用类似的脚本数字分割或者迪斯普利特- 的一部分geniso图像(在 Debian / Ubuntu 上)。如果您更喜欢 Windows / Wine,您可以使用类似的应用程序文件夹斧

例子

测试场景

# Create 2000 files of 1MB (sparse) each.
mkdir allimages && cd $_
for i in {1..2000}
do 
     dd if=/dev/zero of=image$i.jpg bs=1 count=0 seek=1M
done

我现在有 2000 个文件 (2GB),我想将它们拆分到 3 个目录中。

$ ls -la | tail
-rw-rw-r--  1 cmihai cmihai 1048576 Dec  4 12:54 image992.jpg
-rw-rw-r--  1 cmihai cmihai 1048576 Dec  4 12:54 image993.jpg

安装dirsplit。在 ubuntu 上,它包含在genisoimage软件包中。

$ apt-cache search dirsplit
genisoimage - Creates ISO-9660 CD-ROM filesystem images

$ sudo apt-get install genisoimage

迪斯普利特

# Get usage / help
dirsplit -H

# Dry run (get list of changes):
dirsplit --no-act --size 700M --expmode 1 allimages/

# Actual run:
$ dirsplit --size 700M --expmode 1 allimages/
Building file list, please wait...
Calculating, please wait...
....................
Calculated, using 3 volumes.
Wasted: 105254 Byte (estimated, check mkisofs -print-size ...)

# List of files per directory can be found in catalog files you can use with mkisofs.
$ ls
allimages  vol_1.list  vol_2.list  vol_3.lis

数字分割

注意:默认情况下,文件硬链接到源

$ wget https://raw.githubusercontent.com/mayanez/dsplit/master/dsplit.py

$ python dsplit.py -s 700 -v allimages/ out/
Volume 01:
  allimages/: 700 files (700.00 MB).
Total: 700.00 MB (700 files, 1 dirs)
Volume 02:
  allimages/: 700 files (700.00 MB).
Total: 700.00 MB (700 files, 1 dirs)
Volume 03:
  allimages/: 600 files (600.00 MB).
Total: 600.00 MB (600 files, 1 dirs)

陷阱:

  • 我在测试中使用了稀疏文件 - 您需要检查如何dsplit/dirsplit处理稀疏文件、硬链接和软链接。

相关内容