- 締切済み
シェルでファイルが2Gを超えているかの判定は?
posix shでファイルが2Gを超えているかの判定を行いたいです。 size=`ls -l FILE | awk '{printf $5}'` if [ $size > 2147483648 ] then echo "2G超え" fi で、出来るかと思いましたがシェルではこのif文が行えません。 全然違う方法でいいのですが なんとかファイルサイズが2G超えか判定する方法は ありますでしょうか?
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- notnot
- ベストアンサー率47% (4900/10359)
sizeにちゃんとファイルサイズが入っていることは確認できていますか? 環境によっては、2GB超の場合 ls -l で負の数が表示されることもありますけど。 あと、シェルで > はリダイレクトなので、 [ $size > 2147483648 ] だと、2147483648という名前の空ファイルができちゃってるはずです。他の方がお書きの通り、「大なり」は -gt 。 もしls -lが使えないとすると、stat -c %s FILE それもだめなら、find かな。 find . -name FILE -size +2G
- zionic
- ベストアンサー率39% (31/79)
自分の環境では if [ $size -gt 2147483648 ]; thenで問題なかったです。 一度、echoコマンドでsize変数の中身を確認してみてはどうでしょう? 実は正しく動いた結果「2GB超え」というメッセージが表示されて無いのかもしれません。
- beefisdead
- ベストアンサー率63% (92/145)
if [ $size -gt 2147483648 ]; then では? http://www.e.ics.nara-wu.ac.jp/~nogu/tips/shellscript.html lsの結果にawkを使っている時点で、環境依存がある気がします。 「どんな環境でも使える」という条件を捨てて良いのなら、簡単なPerlスクリプトを作成するのが頭を使わなくていい気がします。Perlなら入ってない環境は滅多にないので、スクリプト上は環境間の差違を吸収して、色んな環境で同様に使えますね。もちろん、入っていない環境では使えないのですが。 http://www2u.biglobe.ne.jp/~MAS/perl/waza/files.html lsではなく、statコマンドの結果を見る方法もありそうですね。
補足
if [ $size -gt 2147483648 ]; then では? これだと正しく判定が出来ないので 困っています。 stat関数ならありますが statコマンドはあるのでしょうか?