Shell
以隨機順序對文件夾中的每個文件執行命令
我想為文件夾中的每個文件執行一個命令,但是是隨機的。就像是:
find . -type f -exec <command> '{}' \;
但每次都以另一個順序。這最接近我的需要,但是 1)它不起作用,2)順序是隨機的,但總是相同的:
find . -type f -print0 | sort -Rz | xargs -0 <command>
find . -type f -exec <command> '{}' \;
不等於
find . -type f | xargs <command>
觀察:
$ find -type f ./b ./c ./e ./d ./a $ find -type f -exec echo '{}' \; ./b ./c ./e ./d ./a $ find -type f | xargs echo ./b ./c ./e ./d ./a
xargs
收集一堆給定長度的參數,然後一次執行帶有所有參數的命令。這是從中執行的
find -type f -exec echo '{}' \;
echo ./b echo ./c echo ./e echo ./d echo ./a
這是從中執行的
find -type f | xargs echo
echo ./b ./c ./e ./d ./a
這適用於可以採用多個參數的命令,例如
md5sum
orfile
。但不適用於一次只接受一個參數的命令。為了使行為
xargs
更像find -exec
你可以添加參數:-n1``xargs
$ find -type f | xargs -n1 echo ./b ./c ./e ./d ./a
-n1
告訴xargs
為每個1
參數執行一個命令。在您的範例命令中:
find . -type f -print0 | sort -Rz | xargs -0 -n1 <command>
獎勵:您還可以
find -exec
通過xargs
關閉-exec
with\+
而不是\;
:find -type f -exec <command> '{}' \+