.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