これを行う多くのスクリプトがあります。
command | while read something; do
a
long
list
of
commands
done
を使用してパイプされたすべてのコマンドを実行する方法を理解した人はいますかparallel
?持つアドホックこの問題に対する解決策がありますが、何かを探しています。一般的なparallel
スクリプトへの最小限の変更のみが必要で、可能であればインストールされていない場合でも実行できます。
command
上記の命令は単一の命令に限定されず、ほぼすべてのものであってもよい。a long list of commands
それとも完全に異なる場合があります。
たとえば、gitリポジトリでチェックアウトされたファイルの変更日を最後の変更日に変更する次の行を考えてみましょう。
git ls-tree -r --name-only HEAD |
while read filename; do
unixtime=$(git log -1 --format="%at" -- "${filename}");
touchtime=$(date -d @$unixtime +'%Y%m%d%H%M.%S');
touch -t ${touchtime} "${filename}";
done
git log
デフォルトでは、とはすべて非常に遅いコマンドなので、非常に遅いですtouch
。しかし、これは単なる例であり、単純な例です。
ベストアンサー1
私はbash関数を使用してそれを呼び出します:
myfunc() {
filename="$1"
unixtime=$(git log -1 --format="%at" -- "${filename}");
touchtime=$(date -d @$unixtime +'%Y%m%d%H%M.%S');
touch -t ${touchtime} "${filename}";
}
export -f myfunc
git ls-tree -r --name-only HEAD | parallel myfunc
parallel -0
NULに分割するには。
GNU Parallelをインストールせずに上記のコードを実行するには、次のものを使用できます。
parallel --embed > myscript.sh
次に、上記の内容をmyscript.sh
。