準備のためのサンプルファイル構造は次のとおりです。
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
ゼロバイトで個々の結果を生成します。いいえファイル名に表示されます)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'