sh
30分ごとに実行されるスクリプトを設定しようとしています。実行するたびに、ディレクトリに.RAWファイルが1つ以上あることを確認したいと思います。ファイル拡張子が見つかると別のコードが実行されますが、現在使用する正しいifステートメントが見つかりません。
このコード例は最も理想的なアプローチではないことを知っていますが、私が試したコードは次のとおりです。これは明らかに間違っています。
cd ./dir/
if [ ! -f "*.RAW"]; then
echo "No files!"
else
echo "Yes files!"
fi
.RAW 拡張子があるかどうかを正しくテストするには?
ベストアンサー1
そしてzsh
:
files=(*.RAW(DN))
if (($#files)); then
echo Yes
else
echo No
fi
正しければ定期的な示唆したように、ファイル(または一般ファイルへのシンボリックリンク)-f
は次のとおりです。
file=(*.RAW(ND-.))
代わりに。
POSIX的に:
has_regfiles_by_extension() {
for ext do
for file in .*."$ext" ."$ext" *."$ext"; do
[ -f "$file" ] && return
done
return 1
done
}
if has_regfiles_by_extension RAW raw; then
echo YES
else
echo NO
fi
を使用するには、ls
次の手順を実行します。
if ls -Aq | grep -q '\.RAW$'; then
echo yes
else
echo no
fi
1つの利点は、ディレクトリを読み取れない場合(シェルglobの場合と同じように自動的に無視されるのではなく)、エラーメッセージが表示されることです。