ifステートメントを使用してワイルドカードを使用して、ファイルがフォルダにあることを確認します。

ifステートメントを使用してワイルドカードを使用して、ファイルがフォルダにあることを確認します。

フルネームを持たない複数のファイルを処理する必要があります。 ifステートメントを実行するためにワイルドカードを使用しています。たとえば...

if [ "ESGSN_*.SMS.EDR" ]; then
    echo "There are files to process in this run"
    for F in ESGSN_*.SMS.EDR; do
        gzip < "$F" > "$F.gz"
    done
fi

複数のファイルまたは単一のファイルがあり、圧縮する場合に機能します。ただし、ファイルが存在しない場合は、直接終了せずにzipを実行し続けます。完了して続行する方法があるかどうか疑問に思います。

ファイル名の前の括弧内に「-f」および「-a」演算子を使用してみましたが、「バイナリ演算子が必要です」というエラーが発生します。

何らかの理由で、ファイル名のアスタリスクはメッセージの下に表示されません。したがって、ファイル名は "ESGSN_"*".SMS.EDR"で、二重引用符はアスタリスクです。

ベストアンサー1

if ! gzip ESGSN_*.SMS.EDR 2>/dev/null; then
    printf 'No files to process (gzip exit code: %d)\n' "$?"
fi

文字列ESGSN_*.SMS.EDRが空ではないため、テストは常にtrueです。 globを二重引用符で囲むと*処理されません。

また、ほとんどのシェルは、パターンが何も一致しない場合、デフォルトではパターンを拡張されていません。これは、コードが空のファイルを生成し、ESGSN_*.SMS.EDR.gzパターンがファイル名と一致しない場合を呼び出すことを意味します。

上記のコードは、単にパターンに一致するすべてのファイルを圧縮しようとし、失敗した場合にメッセージを印刷します。

おすすめ記事