所定の位置で動作し、結果を出力

所定の位置で動作し、結果を出力

フォルダで実行されるシェル機能があります(私の場合は、* .eps`ファイルを見つけて空の枠なしでpdfに変換します)。次の関数でこれを抽象化してみましょう。

function do_here() {
    echo $(pwd)
}

ROOT_PATH私はルートパスが与えられたディレクトリとパスを繰り返し、do_here各リーフで作業する賢明な方法を探しています。象徴的な葉があるかもしれませんが、現時点ではこの要件はプラスのようです。

理由は次のとおりです。

  1. ROOT_PATHディレクトリを参照するには、別名を使用してくださいto_path
  2. ランニングcd $to_path
  3. ランニングdo_here
  4. ステップ2に進みます。

手順1でディレクトリパスのリストを取得する方法がわかりません。

ベストアンサー1

Bashは設定されている**場合、再帰ワイルドカードもサポートします。shopt -s globstar.globをサフィックスとして使用すると、ディレクトリのみがインポートされます/dotglob名前がドットで始まるディレクトリを見逃さないように追加されました。

例えば

#!/bin/bash
shopt -s globstar
shopt -s dotglob
do_here() {
    echo "working in $(pwd)...";
}
# cd ROOT_PATH
for d in **/; do (
    cd "$d"
    do_here
)
done

**シェルの仕組み、つまりディレクトリツリー内のシンボリックリンクにはいくつかの違いがあります。ツリーに他のディレクトリへのリンクが含まれている場合は、少なくともいくつかのバージョンのBashがツリーの範囲外になり、それに従います。 (「記号の葉」がどういう意味なのかよく分からないので、それが問題なのかはわかりません。)

おすすめ記事