ディレクトリ内のすべてのファイルを反復処理する必要があります。私が見た一般的な方法の1つは、for file in *; do
で始まるforループを使用することでした。ただし、隠しファイル(「。」で始まるファイル)は含まれていないことに気付きました。他の明白な方法は次のようなことです
for file in `ls -a`; do
ただし、ls
を繰り返し処理することはお勧めできません。ファイル名にスペースがあると、すべてが混乱するためです。ディレクトリを反復処理してすべての隠しファイルを取得する適切な方法は何でしょうか?
スペースで区切られたグロブ一致ファイルのリストを作成するだけです:
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を設定することもできます。
shopt -s dotglob
zsh
では、一致しない場合のエラーを防ぐために、さらにnullglob
を設定する必要があります。
setopt nullglob
または、パターンにグロブ修飾子N
を追加します。
for file in /path/{.,}*(N); do echo "$file"; done