重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

現在、solarisの吐き出すログの自動バックアップshellを運用しています。そのshellの内容は
ifでディレクトリ内存在確認後、*でtarに固める、というもので、
if [ -s $abc/* ]; then
cd $abc
tar -cvf abc_`date "+%Y%m%d"`.tar *

という内容なのですが、 if [ -s ・・・
の存在確認の時点でファイルは実際に存在するのに
存在を認識しない場合があるのです。。

ディレクトリ内のファイルの実行権を変えても認識せず、
たとえば認識しないディレクトリの中に「a」というファイルを
作って再度シェルを流してみると、今度は認識します。しかし削除するとしなくなります。また、認識しないファイルのmvで変名してやってみるとうまくいきます。
何が問題なのでしょうか?ファイルの存在確認において、認識しない場合というのがあるのでしょうか?
お助けください!よろしくお願いします。

A 回答 (3件)

動作しない原因はNo1の方の回答どおりです。


解決するには、
if [ `ls $abc | wc -l` -gt 0 ]; then
...
とかでしょうか。
    • good
    • 1
この回答へのお礼

遅くなりました。。申し訳ございませんでした。。そして
ありがとうございました!教えていただいた方法でできました!
参考になりました!!

お礼日時:2003/01/16 21:41

>if [ `ls $abc | wc -l` -gt 0 ]; then



空のディレクトリでも、
./
../
この二つはカウントされるので

if [ `ls $abc | wc -l` -gt 2 ]; then
の方が良いかも。
    • good
    • 0
この回答へのお礼

そうなんですか。。??
ひょっとしてできないときもあるかもしれないんですね。。
ちょっと慎重に調べつつ運用していこうと思います。
ありがとうございました!参考にさせていただきます!

お礼日時:2003/01/16 21:51

> $abc/*



このワイルドカードによって、マッチするファイルが無い場合、
 [ -s $abc/* ] 

[ -s ]
にとなり、シンタックス・エラーを引き起こします。逆に二つファイルがある場合、例えば
[ -s foo bar ]
となって、これもシンタックス・エラーを引き起こします。
結局、この書き方だと、ファイルが一つだけ存在する時しか、うまく動かないでしょう。
    • good
    • 0
この回答へのお礼

ありがとうございました。
シンタックスエラーですか。。よく耳にはするんですが。。まだまだ勉強がたりないようです(笑
ワイルドカードという言葉も難しいようで、実は簡単なんですね。
参考になりました!ありがとうございました!

お礼日時:2003/01/16 21:49

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!