폴더의 모든 파일에 대해 무작위로 명령을 실행하고 싶습니다. 그것은 다음과 같습니다:
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
추가할 수 있습니다 .-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> '{}' \+