/usr/bin/truncate: パラメーターのリストが長すぎます。

/usr/bin/truncate: パラメーターのリストが長すぎます。

truncateこのコマンドを使用して、テスト用に多数の小さなファイルを作成したいと思います。少数のファイル(100個)でコマンドを実行してみたところ、成功しました。数値を 1000000 に変更するとエラーが発生します。

root:[~/data]# truncate -s 1k {1..100}
root:[~/data]# rm -rf *
root:[~/data]# truncate -s 1k {1..1000000}
-bash: /usr/bin/truncate: Argument list too long
root:[~/data]#

どうすれば解決できますか?うまくいくような気がしますが、うまくいくxargsことはできません。

ベストアンサー1

あなたはできます

echo {1..1000000} | xargs truncate -s 1k

(これはコマンドラインの長さに関係なく、組み込みエコーを持つシェルで使用する必要があります。xargs入力はデフォルトで空白に分割されますが、ここでは重要ではありません。)

上記のコードは多くのメモリを使用できるため、seqmosvyの説明のように使用する方が良いかもしれません。

seq 1 1000000 | xargs truncate -s 1k

しかし、私は通常ループを使います(これは000000notで始まり1、すべての名前に前に0があります)。

for i in {000..999}; do
    touch "$i"{000..999}
done

1つのディレクトリに100万のファイルがあると速度が遅くなる可能性があるため、テストだけではない場合は、ファイルを次のサブディレクトリに分散することをお勧めします。

for i in {000..999}; do
    mkdir "$i"
    touch "$i"/{000..999}
done

これらのファイルが1つのコマンドラインに収まり、作成できず、何らかの問題を解決できない場合は、rm -f *これらのファイルを使用してファイルを削除できない可能性があります。ツリー全体を再帰的に削除する必要がありますfind -maxdepth 1 -type f -delete

おすすめ記事