
ディレクトリ内のすべてのファイルを反復処理する必要があります。私が見た一般的な方法の 1 つは、 で始まる for ループを使用することですfor file in *; do
。ただし、隠しファイル (「.」で始まるファイル) は含まれないことがわかりました。もう 1 つの明らかな方法は、次のようにすることです。
for file in `ls -a`; do
ただし、ファイル名にスペースがあるとすべてが台無しになるため、反復処理はls
お勧めできません。ディレクトリを反復処理して、隠しファイルもすべて取得する適切な方法は何でしょうか?
答え1
スペースで区切られた glob に一致するファイルのリストを作成するだけです。
for file in .* *; do echo "$file"; done
編集
上記は中括弧展開を使って別の形式で書き直すことができる。
for file in {.*,*}; do echo "$file"; done
またはさらに短く:for file in {.,}*; do echo "$file"; done
選択したファイルのパスを追加します:
for file in /path/{..?,.[!.],}*; do echo "$file"; done
選択したファイルのパスを追加しています:
for file in /path/{.,}*; do echo "$file"; done
洗練されたものにしたい場合は、通常は不要なものをリストから削除し.
、に..
変更するだけです。{.,}*
{..?,.[!.],}*
完全性を期すために、dotglob を設定して、ドット ファイルを pure と一致させることもできることに言及する価値があります*
。
shopt -s dotglob
一致しない場合にエラーを防ぐために、zsh
追加の設定が必要です。nullglob
setopt nullglob
または、N
パターンに glob 修飾子を追加します。
for file in /path/{.,}*(N); do echo "$file"; done