
次のコマンドを使用して、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/)
答え2
答え3
あなた解析を試みてはいけない出力ls
。
また、"$file"
空白をキャッチするには引用符を使用する必要があります。バラよりhttp://www.grymoire.com/Unix/Quote.html
これはあなたが望むものを達成することができます:
for file in *; do touch "$file"; done
最初の2つを見てください。ヘビーヒートトラップより詳細な説明のために。
答え4
find . -maxdepth 8 -mindepth 1 -type d -exec touch {} +
最小と最大の深さレベルは何ですか?
最大深さレベル:始点より下の最も高いレベル(負以外の整数)に下がるディレクトリレベル。 -maxlength 0 は、始点自体にのみテストと操作を適用することを意味します。
最小深さレベル:レベル(負以外の整数)より低いレベルでは、テストや操作を適用しないでください。 -minlength 1 は、始点を除くすべてのファイルを処理することを意味します。
通常、8より深いディレクトリはありません。そこで、上記のコマンドでは最大深さを8にしました。