フォルダ内のすべてのファイルに対してランダムにコマンドを実行したいと思います。それは次のとおりです。
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
追加できます。-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
\+
\;
find -type f -exec <command> '{}' \+