폴더의 각 파일에 대해 무작위 순서로 명령 실행

폴더의 각 파일에 대해 무작위 순서로 명령 실행

폴더의 모든 파일에 대해 무작위로 명령을 실행하고 싶습니다. 그것은 다음과 같습니다:

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. 그러나 한 번에 하나의 매개변수만 허용하는 명령에는 적용되지 않습니다.

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 -exec.xargs-exec\+\;

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

관련 정보