ディレクトリ内の各ファイルを繰り返す必要があります。私が見た一般的なアプローチの1つは、で始まるforループを使用することですfor file in *; do
。しかし、隠されたファイル(「.」で始まるファイル)は含まれていないことに気づきました。もう一つの明確な方法は、次のことを行うことです。
for file in `ls -a`; do
しかし、ls
ファイル名に空白があると、すべてがめちゃくちゃになるので、繰り返すのは悪い考えです。ディレクトリを繰り返し、すべての隠しファイルを取得する正しい方法は何ですか?
ベストアンサー1
スペースで区切られた完全一致ファイルのリストを生成するだけです。
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
.
複雑になり、通常必要ない項目をリストから削除するには、に変更するだけ..
です。{.,}*
{..?,.[!.],}*
完璧にするためにドットファイルを一般的に*
。
shopt -s dotglob
矛盾が発生した場合にエラーを防ぐには、zsh
追加の設定が必要です。nullglob
setopt nullglob
N
または、パターンにglob修飾子を追加することもできます。
for file in /path/{.,}*(N); do echo "$file"; done