- ベストアンサー
findとcompressについて
OSはSolarisを使用しています。Verは2.6か8だと思います。 通常compress命令を使用するとファイルを圧縮できるというのは わかるんです。findが検索するという命令ということも分かっています。 findで検索したファイルを圧縮する命令をUNIXシェルの中に記述したと します。その際にfindで指定したファイルを圧縮するプログラムを作成します。 その時に、指定した条件でファイルが見つからなかった場合に、 compress命令を実行するとプログラムが止まってしまうんです。 通常、UNIXのプロンプト!?よりcompressを実行した場合にで 指定したファイルが存在しない場合には ”ファイルもディレクトリもありません”。と表示されますよね。 圧縮したファイルを指定した場合にも確かメッセージが返ってきた と思います。 ここで質問したいのは3点あります。 1.シェルの中に記述した場合、ファイルが存在しない場合には処理が止まって しまうのか?(指定したフォルダにファイルが何にも存在しない場合) 2.compressのオプション(-fなど)で、ファイルが存在しなかった場合の 回避はできるのか? 3.その他の方法にてプログラムが止まることの回避はできるのか? もしくはプログラム上にエラーがあるのか? ぜひ回答よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
find の type オプションを使ってファイルのみを検索対象にして、 その結果をシェル変数に格納して、ファイルが1つも検索されなかったら シェル変数は空きなので何もしない、っていうのを書けばいいと思います。 file=`find . -type f -print` if [ "$file" != "" ] then compress $file fi
その他の回答 (2)
- osamuy
- ベストアンサー率42% (1231/2878)
find . -name '*.log' -exec compress {} \; ――とかやれば、findは、見つかったファイルにたいして、compressを実行するのだから、そもそもファイルが見つからない場合というのは、考慮しなくて良いのでは。
お礼
回答ありとうございます。 うーん。-exec命令も考えてみたんですが…。 検索対象となるファイルが一意ではないんですよ。。。 (ファイル名・拡張子等が決まっていない) osamuyさんの例みたいに、拡張子が".log"っていうふうに 分かっていれば使えるんですが…。 問題に関しては解決しました。 ありがとうございました。
- a-kuma
- ベストアンサー率50% (1122/2211)
まず、大きな勘違いをしているのは > 通常、UNIXのプロンプト!?よりcompressを実行した場合にで > 指定したファイルが存在しない場合には > ”ファイルもディレクトリもありません”。と表示されますよね。 です。ファイル名を指定しない場合には、compress は、標準入力を圧縮しよう、と 動作します。これは man に書いてあることなので、先入観を除いて、きちんと 読めば分かります。 ですから、それぞれの質問の回答は > 1.シェルの中に記述した場合、ファイルが存在しない場合には処理が止まって > しまうのか? 処理は、止まりません。compress が動いている最中です。 > 2.compressのオプション(-fなど)で、ファイルが存在しなかった場合の > 回避はできるのか? できません。「回避」というものではなく、compress の正常な動作です。 > 3.その他の方法にてプログラムが止まることの回避はできるのか? > もしくはプログラム上にエラーがあるのか? まあ、エラーといえば、エラーなのかも(「エラー」というよりは、「間違い」)。 一旦、圧縮対象のファイル名をシェル変数に格納しておいて、それにファイル名が 入っていれば、compress を実行する、というふうにスクリプトを書けばよいでしょう。
お礼
回答ありがとうございます。 確かに大きな勘違いがありましたねェ…。 ご指摘ありがとうございます。 >一旦、圧縮対象のファイル名をシェル変数に格納しておいて、 >それにファイル名が 入っていれば、compress を実行する、 >というふうにスクリプトを書けばよいでしょう。 このやり方でプログラムを記述した所、問題解決しました。 ありがとうございました。
お礼
回答ありがとうございます。 if文の条件として空白とすればよかったのですね!! 問題解決しました。ありがとうございました。