- ベストアンサー
シェルの存在確認コマンドでファイルを認識しない
現在、solarisの吐き出すログの自動バックアップshellを運用しています。そのshellの内容は ifでディレクトリ内存在確認後、*でtarに固める、というもので、 if [ -s $abc/* ]; then cd $abc tar -cvf abc_`date "+%Y%m%d"`.tar * という内容なのですが、 if [ -s ・・・ の存在確認の時点でファイルは実際に存在するのに 存在を認識しない場合があるのです。。 ディレクトリ内のファイルの実行権を変えても認識せず、 たとえば認識しないディレクトリの中に「a」というファイルを 作って再度シェルを流してみると、今度は認識します。しかし削除するとしなくなります。また、認識しないファイルのmvで変名してやってみるとうまくいきます。 何が問題なのでしょうか?ファイルの存在確認において、認識しない場合というのがあるのでしょうか? お助けください!よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
動作しない原因はNo1の方の回答どおりです。 解決するには、 if [ `ls $abc | wc -l` -gt 0 ]; then ... とかでしょうか。
その他の回答 (2)
- xjd
- ベストアンサー率63% (1021/1612)
>if [ `ls $abc | wc -l` -gt 0 ]; then 空のディレクトリでも、 ./ ../ この二つはカウントされるので if [ `ls $abc | wc -l` -gt 2 ]; then の方が良いかも。
お礼
そうなんですか。。?? ひょっとしてできないときもあるかもしれないんですね。。 ちょっと慎重に調べつつ運用していこうと思います。 ありがとうございました!参考にさせていただきます!
- osamuy
- ベストアンサー率42% (1231/2878)
> $abc/* このワイルドカードによって、マッチするファイルが無い場合、 [ -s $abc/* ] は [ -s ] にとなり、シンタックス・エラーを引き起こします。逆に二つファイルがある場合、例えば [ -s foo bar ] となって、これもシンタックス・エラーを引き起こします。 結局、この書き方だと、ファイルが一つだけ存在する時しか、うまく動かないでしょう。
お礼
ありがとうございました。 シンタックスエラーですか。。よく耳にはするんですが。。まだまだ勉強がたりないようです(笑 ワイルドカードという言葉も難しいようで、実は簡単なんですね。 参考になりました!ありがとうございました!
お礼
遅くなりました。。申し訳ございませんでした。。そして ありがとうございました!教えていただいた方法でできました! 参考になりました!!