Bash

/usr/bin/truncate: 參數列表太長

  • August 26, 2019

我想使用該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可以使用的感覺,但我無法讓它發揮作用。

你可以做

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

(這應該與不受命令行長度限制的內置 echo 的 shell 一起使用。xargs預設情況下還會在任何空格上拆分輸入,但這並不重要。)

以上可能會使用大量記憶體,因此seq在 mosvy 的評論中使用 like 可能會更好:

seq 1 1000000 | xargs truncate -s 1k

我通常使用一個循環(這從000000, not開始1,並且所有名稱中都有前導零):

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

在一個目錄中擁有一百萬個文件可能會很慢,所以除非你只是在測試它,否則最好將它們分散到子目錄中,比如:

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

請注意,如果您無法創建文件,因為它們不適合一個命令行並以某種方式解決該問題,您可能無法使用其中rm -f *任何一個來刪除它們。您需要遞歸刪除整個樹,或者執行類似find -maxdepth 1 -type f -delete.

引用自:https://unix.stackexchange.com/questions/537373