ファイルを自動的にタッチするシェルスクリプト

ファイルを自動的にタッチするシェルスクリプト

ディレクトリ内のすべてのファイルにアクセスするシェルスクリプトを作成しました/tmp。ところで 'というエラーメッセージが表示されます /bin/touch: Argument list too long。問題の原因は何ですか?

#!/bin/bash

dayNo=1
while test $dayNo -le 200
do
    touch `find /tmp/`
    sleep 86000
done

ベストアンサー1

/tmpファイルが多すぎます。不適切コマンドラインにすべての名前を一度に表示します(パスにスペースがある場合は、使用しているバージョンも安全ではありません)。

良いニュースは、find次のように安全かつ正確に実行できることです。

find /tmp -exec touch -c '{}' +

すべてのファイルは以前と同じように検索し、必要なだけ実行してtouch毎回必要な数のファイルを実行します。

find-execオプション一致するファイルを実行し、パスを置き換えるコマンドを受け入れます{}+つまり、複数のファイルに対して一度に、または各ファイルに対して一度だけコマンドを実行します\;touch


コメントで指摘したように、-execdir touch -c '{}' \;これは厳しく安全ですが、シングルユーザーシステムでは少し遅く、大きな利点はありません。まず、各サブディレクトリに切り替えてから、毎回そのディレクトリのファイルに対してのみコマンドを実行して、特定の競合状態を回避します。この-execdirオプションは非標準拡張ですが、サポートされています。牛に似た一種の栄養FreeBSDオープンBSDネットワークBSDオペレーティングシステム finds;他の商用 Unices には通常この機能はありません。何を使用しているのかわかりませんが、該当する場合は上記を検討してください。

おすすめ記事