ディレクトリの内容を繰り返す正しい方法

ディレクトリの内容を繰り返す正しい方法

ディレクトリ内の各ファイルを繰り返す必要があります。私が見た一般的なアプローチの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

おすすめ記事