Find
使用 find -exec command {} + 呼叫多少命令
查找手冊頁狀態:
-exec command {} + This variant of the -exec action runs the specified command on the selected files, but the command line is built by appending each selected file name at the end; the total number of invocations of the command will be much less than the number of matched files.
一直認為這會導致
find
只執行command
一次。有沒有辦法知道命令被呼叫了多少次?請注意,這很重要,就好像它只是一次我所想的那樣,那麼存在建構太大的參數列表而
command
無法處理的危險;但是如果 find 最終會拆分呼叫(有點類似於parallel
),那麼這將得到緩解。
使用的緩衝區取決於
find
版本,在我在此處可用的 SuSE 框中的大小似乎約為 256Kb。因此,要計算“命令”被呼叫的次數,您需要知道每個找到的文件路徑的長度,然後它將(大約)所有路徑長度的總和為分割空間增加一,減去命令本身,除以緩衝區大小。
例如,您發現平均路徑長度為 200 字節的 20,000 個文件,即 4,020,000 字節,除以 256 Kb 為 15.33,因此您需要大約 16 次呼叫。
考慮到不破壞兩個連續呼叫之間的文件路徑的需要,確切的計算會稍微複雜一些,但你會得到一個大概的數字。
請參閱此處的執行緒(帶有原始碼),其中報告的大小為 32Kb,並且被認為是不必要的低(現在我想到了,也許我自己
find
正在使用 syslimits。我沒有嘗試過);coreutils
的版本,據推斷,似乎是該版本的四倍,即 128 Kb。