申し訳ありませんが、これが複製としてすぐにクローズされる前に、説明させてください。私は次のような多くの方法を試みました:
for d in /Applications ; do
echo "$d"
done
しかしそれは戻る
/アプリケーション
/ Applicationsの内容の代わりに。
私も試しました:
#!/bin/bash
FILES=/Applications
for file in $FILES
do
echo $file
done
これは基本的に同じことです。しかし、私が気づいたのは、次のような場合です。
#!/bin/bash
for file in *
do
echo $file
done
ホームフォルダー内のすべてのフォルダーが正しくエコーされます。誰が何が起こっているのか知っていますか?
Jeff Schallerによる注記 と同様に、_*
_は通常ls
のように機能します— _.
_(ピリオド)。 bashを使用していて、名前が_.
_で始まるものを取得したい場合、s et(オンにする)sh = ell opt ion dotglob
コマンドで
_shopt -s dotglob
_
これにより、_*
_は_ls -A
_のように機能します— _.
_および_..
_自体は表示されません。 _.
_で始まる他のすべてを表示します。
あなたの質問は「ディレクトリ内のすべて」について言及しています。これはややあいまいなフレーズです。 (トップレベルの)_/Applications
_ディレクトリ内のすべてを意味する場合は、他の回答で問題ありません。しかし、_/Applications
_ tree のすべてが必要な場合(つまり、_/Applications
_ディレクトリとそのサブディレクトリのすべて) )、bashを使用している場合は、コマンドでシェルオプションglobstar
を設定します
_shopt -s globstar
_
これにより、_**
_ がファイル名コンポーネントとしてここと以下のすべてを意味します。そう
_for file in /Applications/**
do
echo "$file"
done
_
_/Applications
_ tree 内のすべてのオブジェクト(ファイル、ディレクトリなど)をリストします。
これを同じコンポーネントレベルで他の文字と組み合わせることはできません。つまり、_foo**bar
_のようなことはできません。ただし、_**
_の後に他のコンポーネントを追加します。例えば、
_for file in /Applications/**/README
_
_/Applications
_ツリー内のREADME
という名前のすべてのファイルをループし、
_for file in /Applications/**/*.txt
_
名前が_.txt
_で終わるすべてのファイルを検索します。
一度に複数のオプションを設定できます。例:
_shopt -s dotglob globstar
_
オプションの完全なリストについては、bashのドキュメントを参照してください。 n _shopt -u
_でオプションを設定できます。
"$file"
_)。また、何をしているのか確実にわかっている場合は除きます。ディレクトリ内のファイル(およびサブディレクトリ)を反復処理するには、次を使用できます。
for file in /Applications/*
do
echo "$file"
done
一致するものが見つからない場合、file
変数には/Applications/*
文字列(アスタリスク付き)。これは、次のコマンドが既存のパスを想定している場合にエラーを引き起こす可能性があります。一致するファイルがない場合に何もしない場合は、nullglob
オプションを使用できます。
shopt -s nullglob
for file in /Applications/*
do
echo "$file"
done
*
はシェルグロビング(パス名展開)演算子(?
および[]
も)と呼ばれ、引用符なしで呼び出すと、現在のディレクトリ内のすべてのファイルに展開されます(任意のディレクトリプレフィックス)。接頭辞を使用する場合。 /foo/*
、それはディレクトリ/foo
内のすべてのファイルに展開されます。
これは特定のファイルを照合するためにも使用されます。たとえば、現在のディレクトリのfoo
で始まりbar
で終わるファイルのみを照合するには、globパターンを使用します。
foo*bar
したがって、for
ループは次の形式になります。
for f in foo*bar; do echo "$f"; done
シェルのman
ページを読んで、シェルのグロビングについてさらに理解を深めてください。