フルネームを持たない複数のファイルを処理する必要があります。 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
パターンがファイル名と一致しない場合を呼び出すことを意味します。
上記のコードは、単にパターンに一致するすべてのファイルを圧縮しようとし、失敗した場合にメッセージを印刷します。