1. ホーム
  2. bash

[解決済み] Bashを使ってファイルのサイズを確認するにはどうしたらいいですか?

2022-04-25 02:40:22

質問

0-sizeをチェックするスクリプトを持っていますが、代わりにファイルサイズをチェックする簡単な方法があるはずだと思いました。 例えば file.txt は通常100kBですが、90kB以下(0を含む)かどうかをスクリプトでチェックさせ、以下のようにするにはどうしたらよいでしょうか。 ウィジェット この場合、ファイルが破損しているので、新しいコピーを作成する必要があります。

現在使用しているもの...

if [ -n file.txt ]
then
  echo "everything is good"
else
  mail -s "file.txt size is zero, please fix. " [email protected] < /dev/null
  # Grab wget as a fallback
  wget -c https://www.server.org/file.txt -P /root/tmp --output-document=/root/tmp/file.txt
  mv -f /root/tmp/file.txt /var/www/file.txt
fi

解決方法は?

[ -n file.txt ] は、そのサイズをチェックしません。それは、文字列 file.txt は長さが0ではないので、必ず成功します。

もし、"size is non-zero" と言いたい場合は [ -s file.txt ] .

ファイルのサイズを取得するためには wc -c でサイズ(ファイルの長さ)をバイト単位で取得します。

file=file.txt
minimumsize=90000
actualsize=$(wc -c <"$file")
if [ $actualsize -ge $minimumsize ]; then
    echo size is over $minimumsize bytes
else
    echo size is under $minimumsize bytes
fi

この場合は、それでよさそうですね。

しかし、参考までに、ファイルがどれくらいのディスクスペースを使用しているかを知りたい場合は du -k でサイズ(使用するディスク容量)をキロバイト単位で取得します。

file=file.txt
minimumsize=90
actualsize=$(du -k "$file" | cut -f 1)
if [ $actualsize -ge $minimumsize ]; then
    echo size is over $minimumsize kilobytes
else
    echo size is under $minimumsize kilobytes
fi

出力形式をより細かく制御する必要がある場合には stat . Linuxでは、次のようなものから始めます。 stat -c '%s' file.txt そして BSD Mac OS X のようなものです。 stat -f '%z' file.txt .