"ls -l /a/*/b"から変数への拡張パスを取得する方法

以下のようにフォルダ構造を作成しました。

mkdir -p test/f{1..4}/inside

走っている間にls -l test/*/私は得た。


test/f1/:
total 0
drwxr-xr-x  2 s  ff  68 Jun 21 18:37 inside

test/f2/:
total 0
drwxr-xr-x  2 s  ff  68 Jun 21 18:37 inside

test/f3/:
total 0
drwxr-xr-x  2 s  ff  68 Jun 21 18:37 inside

test/f4/:
total 0
drwxr-xr-x  2 s  ff  68 Jun 21 18:37 inside

test/f1/:追加のロジックを実行するためにループで使用できるように、変数から拡張パス(たとえば)をどのように取得できますか?

ベストアンサー1

「複数の項目」を含む変数を繰り返したくありません(変数には単一の項目のみを含めることができます)。特に配列をサポートするbashまたは他のシェルを使用する場合。

次のように、これらのディレクトリを使用して配列を設定できます。

array=( test/*/ )

その後、これを繰り返します。

$ for item in "${array[@]}"; do printf '\n%s\n' "Current directory: $item"; ls -l "$item"; done

Current directory: test/f1/
total 0
drwxr-xr-x 2 jessebutryn staff 64 Jun 21 07:20 inside

Current directory: test/f2/
total 0
drwxr-xr-x 2 jessebutryn staff 64 Jun 21 07:20 inside

Current directory: test/f3/
total 0
drwxr-xr-x 2 jessebutryn staff 64 Jun 21 07:20 inside

Current directory: test/f4/
total 0
drwxr-xr-x 2 jessebutryn staff 64 Jun 21 07:20 inside

ただし、次のように直接繰り返すこともできます。

for item in test/*/; do
    #something with "$item"
done

注:私は常に相対パスではなくフルパスを使用することをお勧めします。

for item in /path/to/test/*/; do
    #something with "$item"
done

これはワイルドカードを使用するときに特に安全です。

おすすめ記事