この質問は this one に関連しています。
私は通常、1つのディレクトリに格納されている多くのファイル(+/- 1,000,000)を生成するアニメーションを使用しています。 Mac Os Xでは、いくつかのバグが+/- 30,000以上のファイルで発生したため、以前はアニメーションをさまざまなディレクトリに分割していました。
Ubuntuでは、1つのディレクトリが保持できるファイルの数に制限はありますか?
Ubuntuはディレクトリのサイズを制限しません。ファイルシステムによって課されます。各ファイルとディレクトリは、いわゆるiノードです。 df -i
を使用して、使用中のすべてのマウント済みファイルシステムで使用可能なiノードの数を確認できます。
50 GB(46 GiB)のext4ホームパーティションのiノード制限が十分に大きいため、問題なく100万と1つのファイルを作成しました。
touch
ユーティリティと組み合わせて、ファイルの作成にシェル拡張を使用しました。
mkdir test
cd test
touch {0..300000}
touch {300000..600000}
touch {600000..900000}
touch {900000..1000000}
これにより、ls | wc -l
で検証可能な1000001ファイルが作成されます。 300000..600000
ではなく300001..600000
なのはなぜですか?私はその1を最後に置くのが面倒だったからです。
df -i
は次のようになります。
/dev/sda6 3055616 1133635 1921981 38% /home
次に、テストファイルを削除します(cd ..&&rm -f test
に時間がかかりました。そのため、ファイル名にはrm
を使用してください):
rm {0..300000}
rm {300000..600000}
rm {600000..900000}
rm {900000..1000000}
cd ..
rmdir f
また、使用中のiノードの数は、ファイルを削除した直後に減少しました。
/dev/sda6 3055616 133634 2921982 5% /home
ファイルシステムがそのような多数のファイルを許可している場合でも、そのような大きなファイルを単一のディレクトリに保存するのは恐ろしい考えです。少なくともf/i/l/e/filename.ext
のような構造を持ついくつかのサブディレクトリを使用します。多くの場合、プログラムはこのような大量のファイルを予期していません。