- 締切済み
バックアップをif文にて行いたい。
突然ですが、教えていただきたい事がございます。 今、Solaris8でシェルを作成しています。 ある対象となるファイルがあったとします。 そのファイルに何か書き込まれていたら、その該当 するものをコピーし、何も書き込まれていなかったら コピーは行わず終了する様にシェルを作成したいと 思っています。 そこで、 「もし、対象となるファイルが白紙ならば…」 となる構文が作れないので、申し訳御座いませんが 教えていただけないでしょうか。 つまり、ファイルの中身を見て白紙かどうか判断さ せる文章が作れなくて困っています。 対象ファイルは/tmp配下にあるlog_fileとします。 以上、よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
テスト演算子には以下のものがあります if (-e $file)# ファイルが存在する場合 if (-z $file)# ファイルサイズが 0 の場合 if (-s $file)# ファイルサイズが 0 でない場合(ファイルサイズを返す) #/bin/sh if [ -s file ] ;then cp file file.backup fi こんなんでいかがでしょう
- yambejp
- ベストアンサー率51% (3827/7415)
シェルといわれても何シェルですか? 白紙とはファイルサイズが0という意味ですか? 一般にファイルサイズがゼロの場合は-sで 判定しますがsolarisはよくわかりません。 こんな感じでためしてください。 test.sh #/bin/sh if [ -s /tmp/log_file ] ; then echo "ok"; fi
補足
さっそくのご回答有難うございます。 シェルはCシェルを使っています。 ファイルというのはコピー時にコピーできなかった ファイルを書き込むlogファイルです。 コピーの対象となる物は、5分毎に更新されており ます。更新時はファイルが上書きする仕組みになって おりますが、古いファイルを消して新しいファイル を作るっていうアルゴリズムを取っており、その瞬間 にコピーを行なった場合、 「cp:cannot access xxx」と言ったログが吐かれて コピーできない状態にあります。 このログを白紙か否かと、うたっていたファイルに 吐くように設定しています。このファイルに書き込 みがなければ正常にcpは行なわれたという事で作業を 終了させ、もし書き込みがあれば、awk,sed等でコピー できなかったファイル一覧表に変えて、ファイルを catで表示してforeachを用いて再度cpコマンドを 実行って手順にしようと思っていました。 分かりにくい文章ですみませんでした。
補足
ありがとうございます。 テスト演算子を教えていただき感謝しております。 さっそく試してみたいと思います。