bashのcmd "for"と同じですか?

bashのcmd

私はbash(またはLinuxシェル)についてほとんど知りませんが、bashだけを使用します。私はWindowsでcmdを使用することに慣れており、for %c in (*.*) do {something}cmdがなければ不快だと感じます。私はwine cmdを試しましたが、私が望むものではないLinuxコマンドをまったく解釈しません({something}が必要です)。助けが必要ですか?

Windowsでは、ファイルごとに1回for %c in (*.*) do {something}実行されます{something}(ディレクトリは無視されます)。現在の繰り返しのファイル名{something}を参照できます%c。他の修飾子はファイルパスの抽出を許可するか、パスなしでファイル名、ファイル拡張子、属性、変更日時、サイズなどを使用してファイルの代わりにディレクトリをfor /d %c in (*.*) ...処理します。どちらの場合も、Unixスタイルのシステム*.*と同じ名前のないファイルやディレクトリを含む、隠されていないすべてのファイルまたはディレクトリと一致します。*.

PS cmd "for"には、bashの1つのコマンドで扱わない可能性がある多くの用途があることを知っていますが、上記のコマンドと同等のものを知りたいです。

ベストアンサー1

for file in *; do
  echo "$file"
done

ただし、これは通常、「隠し」ファイル(ドットで始まる名前)と一致しません。

隠しファイルを一致させるには、以前もこれを行う必要がありました。

shopt -s dotglob

ディレクトリ(およびおそらく「奇妙な」エントリ)をスキップするには、ループ内でそのディレクトリを検索する必要があります。パターンマッチング(*)はオブジェクトタイプには気にしません。

for file in *; do
  test -f "$file" || continue
  echo "$file"
done

シンボリックリンクは特別なケースです。ファイルに接続されているがファイルが別のディレクトリにある可能性がある場合に考慮されます。シンボリックリンクを無視します。

for file in *; do
  test -f "$file" || continue
  test -L "$file" && continue
  echo "$file"
done

おすすめ記事