は行うには簡単なことでは最新の処理時間を追跡するファイルをタッチすると、そのファイルよりも新しいコンテンツへ自分自身を制限するfind
を伝えることです。
他に進む前に、一方のモードでjpegoptim
のすべての呼び出しを完了し、我々は二つの別々のパスを実行していた前のセマンティクスを、維持するために:
#!/bin/bash
extra_args=()
[[ -e last-scan ]] && extra_args=(-newer last-scan)
find . -name '*.jpg' "${extra_args[@]}" -exec jpegoptim --strip-all '{}' +
find . -name '*.jpg' "${extra_args[@]}" -exec jpegoptim --all-progressive '{}' +
touch last-scan
代替案としては、考慮してください。
#!/bin/bash
extra_args=()
[[ -e last-scan ]] && extra_args=(-newer last-scan)
find . -name '*.jpg' "${extra_args[@]}" \
-exec sh -c 'jpegoptim --strip-all "[email protected]"; jpegoptim --all-progressive "[email protected]"' _ '{}' +
touch last-scan
この後者のアプローチでは、を1回だけ実行してから、ファイルの各バッチをシェルに渡します。これは、responsibですそのバッチの各モードで順番にjpegoptim
を実行してください。
は最後に:私たちは直接jpegoptim
の両方のコピーを開始する単一find
パスを持って、ここで
#!/bin/bash
extra_args=()
[[ -e last-scan ]] && extra_args=(-newer last-scan)
find . -name '*.jpg' "${extra_args[@]}" \
-exec jpegoptim --strip-all '{}' + \
-exec jpegoptim --all-progressive '{}' +
touch last-scan
;:jpegoptim
は、同時使用のために安全である場合は、次の操作を行うことができここでのリスクは、jpegoptim --strip-all
とjpegoptim --all-progressive
が同時に同じファイルに対して安全に動作できない場合、これはひどく動作する可能性があることです。
'find | 'xargs'は実際には' find'側に '-print0'を使い、' xargs'側に '-0'を使う以外は実際には安全ではありません(残念なことに、これらは両方とも非POSIXオプションですが、幸いにも、世界のGNUとBSDの両方の側面)。 'xargs'は、ファイル名の引用符とスペースを構文的に扱うので、ファイル名が厳密に管理されていなければ元のコードを使用すれば、少なくとも内容が失われる可能性があります。 –
ところで、 'chmod 777'は**非常に**悪い習慣です。あなたのシステム上のすべてのユーザーに、「誰もが含まれていない」ファイルへの書き込み許可は、そのソフトウェアが潜在的に悪質なデータを処理していると考えられるため、オペレーティングシステムが信頼できないユーザーとして実行していることを意味します**あなたのコンテンツに'ssh'はハンドシェークプロセスの早い段階で(リモートシステムの認証情報が認証される前に)コードを実行します。原則として、 'o + w'は*決して*するべきではありません。これは' o + wx'には二重に当てはまります。 –
(今では、 'chroot'などのような他のサンドボックスがしばしばありますが、Linuxのchrootはバイパスするのがはるかに容易です。サンドボックスデーモンの信頼できないコンポーネントを 'nobody'として実行することは意味がありません)。 –