Bashの各反復エントリに対するアクセス値

Bashの各反復エントリに対するアクセス値

.xzディレクトリを繰り返し、拡張子を持つすべてのファイルを検索するコードがあります。

問題は、各繰り返しファイルにアクセスする方法がわからないようですが、.xz私がROOTPATH間違っているのでしょうか?

ROOTPATH='/home/user/path'
for file in "$ROOTPATH"; do
find $PWD -name '*.xz'
echo "file is $file"
done

すると、次のようなファイルが出力されます。

/home/user/path/file1.tar.xz
/home/user/path/file2.tar.xz

その後、echo部品が印刷されます。

file is /home/user/path

次の各繰り返し項目にどのようにアクセスできますか?

/home/user/path/file1.tar.xz
/home/user/path/file2.tar.xz

ありがとう

ベストアンサー1

*.xzパス内のファイルを一致させるためにglobを使用せず、そうするときにfindコマンドも必要ありません。ただ

ROOTPATH="/home/user/path"
for file in "$ROOTPATH"/*.xz; do
    [ -f "$file" ] || continue
    printf "%s\n" "$file"
done

これは、指定されたパスの拡張子を持つすべてのファイルと*.xz一致する標準グローバルパターンです。.xzこれは[ -f "$file" ] || continue、globが空の結果を返す(つまりファイルが見つからない場合)、ループシャットダウンを正常に処理するために必要な完全性チェックです。

偶然にサブディレクトリでもファイルを探している場合は、拡張シェルのグロービングオプションを有効にしてglobstarファイル名の再帰的な一致を有効にしてから、次の手順を実行します。

shopt -s globstar nullglob
for file in "$ROOTPATH"/**/*.xz; do
    printf "%s\n" "$file"
done

おすすめ記事