ディレクトリ内のすべてのフォルダをタッチします。

ディレクトリ内のすべてのフォルダをタッチします。

次のコマンドを使用して、cwdのすべてのフォルダのタイムスタンプを更新しようとします。

for file in `ls`; do touch $file; done

しかし、これはうまくいかないようです。どんなアイデアがありますか?

ベストアンサー1

touchこれまでのすべての答え(および質問の例)は、「すべてのフォルダをタッチする」と言っても、ディレクトリ内のすべての項目が欲しいと仮定しています。ディレクトリにファイルとフォルダが含まれていて、フォルダのみを更新したい場合は、次のものを使用できますfind

$ find . -maxdepth 1 -mindepth 1 -type d -exec touch {} +

または、find実装が非標準-mindepth/-maxdepth述語をサポートしていない場合:

$ find . ! -name . -prune -type d -exec touch {} +

これ:

$ touch -c -- */

以下を除くほとんどのシェルで動作します。

  • それもtouch ディレクトリへのシンボリックリンク通常のディレクトリに加えて
  • 隠されたものを無視します
  • ディレクトリがない場合、またはディレクトリへのシンボリックリンクがない場合は、*ThompsonシェルではなくシェルまたはThompsonシェルから呼び出されるファイルを生成します(この場合はエラーが報告されます)。ここではこの問題を解決するためにこれを使用していますが、それでも問題がある可能性があります。cshtcshzshfish-ctouch*

隠しディレクトリを含むディレクトリにのみzsh使用してください。touch

touch -- *(D/)

おすすめ記事