フォルダ内の各ファイルに対してランダムな順序でコマンドを実行する

フォルダ内の各ファイルに対してランダムな順序でコマンドを実行する

フォルダ内のすべてのファイルに対してランダムにコマンドを実行したいと思います。それは次のとおりです。

find . -type f -exec <command> '{}' \;

しかし、毎回別の順序で行われます。これは私が必要とするものに最も近いですが、1)うまくいかず、2)順序はランダムですが、常に同じです。

find . -type f -print0 | sort -Rz | xargs -0 <command>

答え1

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これは、複数の引数(たとえば、または)を使用できるコマンドに適していますfile。ただし、一度に1つのパラメータのみを許可するコマンドには適用されません。

xargs動作をよりよくするには、パラメータをfind -exec追加できます。-n1xargs

$ find -type f | xargs -n1 echo
./b
./c
./e
./d
./a

-n1xargs各引数に対してコマンドを実行するように指示します1

例のコマンドでは:

find . -type f -print0 | sort -Rz | xargs -0 -n1 <command>

ボーナス:代わりに以下を使用してモーションをオフにすると、より類似したモーションを作成することもできますfind -execxargs-exec\+\;

find -type f -exec <command> '{}' \+

関連情報