준비를 위한 샘플 파일 구조는 다음과 같습니다.
test/1
test/2
test/3
나는 이것을하고 싶다 :
find -P -O3 "test/" -type f |
parallel --use-cpus-instead-of-cores -j+0 --tmpdir "test/" --files ./test.bash
다음과 같은 경우 다른 수동 매개변수를 전달합니다 test.bash
.
#!/usr/bin/env bash
main() {
echo "yay $1 $2!"
}
main "$1" "$2"
출력은 cat test/*.par
다음과 같습니다
yay test/1 param!
yay test/2 param!
yay test/3 param!
나는 다음을 시도했습니다 :
parallel --use-cpus-instead-of-cores -j+0 --tmpdir "test/" --files ./test.bash ::: 'param'
parallel --use-cpus-instead-of-cores -j+0 --tmpdir "test/" --files ./test.bash {} ::: 'param'
그러나 그들은 모두 실패하고 파이프 입력보다 수동 인수를 우선시합니다.
이를 수행할 수 있는 방법이 있습니까?
답변1
파일 이름에 구분 기호(줄 바꿈)가 포함될 수 있으므로 이는 약간 안전하지 않습니다.
find -P -O3 test/ -type f \
| parallel -j+0 --use-cpus-instead-of-cores \
--tmpdir test/ \
--files \
-m ./test.bash {} 'param'
사용:
find -P -O3 test/ -type f --print0 \
| parallel -0 \
-j+0 --use-cpus-instead-of-cores \
--tmpdir test/ \
--files \
-m ./test.bash {} 'param'
find
0바이트로 개별 결과를 생성합니다.아니요파일 이름에 표시됨) parallel
을 사용하세요.
그러나 왜 사용합니까 find
? zsh
대신에 ,를 사용하세요 bash
.
setopt extendedglob # usually already be on by default
setopt nullglob # don't fail if no files found
parallel -j+0 --use-cpus-instead-of-cores \
--tmpdir test/ \
--files \
-m ./test.bash {} 'param' \
::: test/**/*(.)
### ^^------- look recursively into all folders including the current
### (doesn't follow symlinks!)
### ^----- for anything
### ^^^-- as long as it's a file
답변2
결국 찾았다인용하다!
find -P -O3 test/ -type f \
| parallel -j+0 --use-cpus-instead-of-cores \
--tmpdir test/ \
--files \
-m ./test.bash {} 'param'