はい

はい

例:20,000枚の画像があり、それをCD(フォルダあたり最大700 MB)に書き込むためにフォルダにグループ化する必要があるとします。

一般:N個のファイルがあり、すべてのグループがほぼ同じサイズになるように(最大に近い)M個のグループに分割する必要があります。

M個のグループで、またはサイズが異なるグループで...何でも可能です

これは考える必要もないようですが…どうすればいいですか?

答え1

仮定:何千ものファイル(合計700 MB以上)を含むフォルダをそれぞれ700 MBの別々のディレクトリに分割して、複数のCDに書き込むことができます。

Linuxでは、次のスクリプトを使用できます。数値分割または分割- の一部ジェニソイメージ(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

関連情報