パラレルをxargsコマンドに変換

パラレルをxargsコマンドに変換

このコマンドを並列性を使用しないコマンドに変換しようとしています。

find . -type f -iregex '.*.ts\|.*.js\|.*.tsx\|.*.jsx' | parallel 'touch {} -d "$(date -d \@$((0x$(md5sum {} | cut -b 1-7))))"'

私が思いついたことはうまくいきません。

find . -type f -iregex '.*.ts\|.*.js\|.*.tsx\|.*.jsx' -print0 | xargs -0 md5sum | cut -b 1-7 | xargs -0 -I {} touch -d \@0x{}

私が達成したいのは、キャッシュの目的でファイルのmtimeをmd5sumに設定することです。

答え1

スクリプトを変換する理由を書いていません。おそらく、スクリプトがGNU Parallelに依存しないことを望むかもしれません。

この場合、parallel --embedGNU Parallelをシェルスクリプトに含めることに興味があるかもしれません。

parallel --embed > newscript

次に端を編集しますnewscript

newscriptその後、GNU Parallelがインストールされていないコンピュータで使用できます。

--embedバージョン20180322から利用可能です。

答え2

xargsGNUとの違いは、parallel コマンド構造を基本的に変更する必要があるほど大きくはありません。これ

探す。<検索パラメータ>-print 0 | xargs -0 -L 1 sh -c 'touch "$1" -d "$(date -d @$(( 0x$(md5sum "$1" | cut -b 1-7) )) )"' シャック
働く

また、私のシステムでは使用する必要がないため、処理することもできます date -d。 touch-d @number

探す。<検索パラメータ>-print 0 | xargs -0 -L 1 sh -c 'touch "$1" -d "@$(( 0x$(md5sum "$1" | cut -b 1-7) ))"' sh

関連情報