.RAW ファイル拡張子をテストするには?

.RAW ファイル拡張子をテストするには?

sh30分ごとに実行されるスクリプトを設定しようとしています。実行するたびに、ディレクトリに.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の場合と同じように自動的に無視されるのではなく)、エラーメッセージが表示されることです。

答え2

あなたの例の答えはほぼ正確です。まず、".RAW"テスト文字列を終了文字列から分離する必要があります]

if [ ! -f "*.RAW" ];

この場合、引用符の外側にアスタリスクを入れてシェルグローブを実行できます。したがって、完成したコマンドは次のようになります。

if [ ! -f *".RAW" ];

ただし、次のタスクを実行したい場合は、このアプローチはあまり役に立ちません。使用文書.RAW。この場合、ディレクトリ内の各ファイルの拡張子を次のように比較します。

for file in "test/"*; do
    if [ "${file##*.}" = "RAW" ]; then
        echo "Found raw file"
    fi
done

Bash 構文 ${var##*.} は、実行できる巧妙なシェル引数拡張の一部です。詳細は以下で確認できます。GNUウェブサイト

答え3

すべての助けに感謝します。一部は動作しませんが。

しかし、他の質問に対する答えで見つけたコードをうまく実装しました! (https://unix.stackexchange.com/a/87476)

export DIR=./folder
if ls ${DIR}/*.RAW &>/dev/null
then
  echo "Yes!"
else
  echo "No!"
fi

答え4

2つのBourne Shellソリューション

Bourneシェルを使用してください(配列またはシェルオプションはサポートされていません。)空のボールまたはグローバル障害)globが見つからない場合は、ゼロ以外の終了状態またはglob自体が返されるという事実を処理する必要があります。たとえば、

if [ -n "`ls *.RAW 2> /dev/null`" ]; then
    echo "At least one RAW file found!"
else
    echo "No RAW files found."
fi

一般的に言えば、依存してはいけません。エルエスこれはコマンドですが、これはユースケースには十分で、Bourneシェルの制限を解決します。実際、シェル組み込み機能のみを使用するには、割り当てを使用し、glob自体をエラー条件として明示的にテストする必要があります。たとえば、

files=*.RAW
if [ "$files" = "*.RAW" ]; then
    echo "No RAW files found."
else
    echo "At least one RAW file found!"
fi

関連情報