たとえば、この for ループでは
for var in ?????
do
dummy command
done
私は現在存在するディレクトリ内のすべてのディレクトリを繰り返すことができますが、これは不明なディレクトリのリストなので、疑問符がある場所に各ディレクトリを書き込むことはできません。助けてくれてありがとう。
答え1
最も簡単なのは、お客様の要件を満たすことです。」現在私がいるディレクトリのすべてのディレクトリを繰り返します。"、ワイルドカードのみを使用してください。
for d in */
do
dummy_command "$d"
done
コマンドが末尾のスラッシュを処理できない場合$d
に置き換えることができます。"$d"
"${d%/}"
コマンドが複数の引数を受け入れることができる場合は、ループをまったく繰り返す必要はありません。
dummy_command */
dummy_command
テストの例は簡単ですecho
。
気づくすべての場合にパターンが一致しない場合は、*/
文字通りアスタリスクとスラッシュでコマンドに渡されます。これはほとんど確かにあなたが望むものではありません。
ループの上にこの行を追加すると問題を解決できますが、bash
その時点から適用されることに注意してください。
shopt -s nullglob # Expand unmatched wildcards to "nothing"
...相手が起こるshopt -u nullglob
かスクリプトが終わるまで
答え2
最小/最大深度などの項目をさらに制御するには、whileループでfindを使用できます。
while IFS= read -r dir; do
echo "$dir"
done < <(find . -type d)
その後、必要に応じてルックアップオプションを変更できます。スペースを含むディレクトリ名を探すのと同じようにできます。find . -type d -name '* *'
答え3
次のように(ファイル名にスペースを含むディレクトリを繰り返し一覧表示します):
shopt -s globstar
dummy_command **/*' '*/
またはforループの使用に固執する場合:
shopt -s globstar
for dir in **/*' '*/
dummy_command "$dir"
done