次のコマンドを使用して、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シェルから呼び出されるファイルを生成します(この場合はエラーが報告されます)。ここではこの問題を解決するためにこれを使用していますが、それでも問題がある可能性があります。csh
tcsh
zsh
fish
-c
touch
*
隠しディレクトリを含むディレクトリにのみzsh
使用してください。touch
touch -- *(D/)