- ベストアンサー
findとcompressについて
OSはSolarisを使用しています。Verは2.6か8だと思います。 通常compress命令を使用するとファイルを圧縮できるというのは わかるんです。findが検索するという命令ということも分かっています。 findで検索したファイルを圧縮する命令をUNIXシェルの中に記述したと します。その際にfindで指定したファイルを圧縮するプログラムを作成します。 その時に、指定した条件でファイルが見つからなかった場合に、 compress命令を実行するとプログラムが止まってしまうんです。 通常、UNIXのプロンプト!?よりcompressを実行した場合にで 指定したファイルが存在しない場合には ”ファイルもディレクトリもありません”。と表示されますよね。 圧縮したファイルを指定した場合にも確かメッセージが返ってきた と思います。 ここで質問したいのは3点あります。 1.シェルの中に記述した場合、ファイルが存在しない場合には処理が止まって しまうのか?(指定したフォルダにファイルが何にも存在しない場合) 2.compressのオプション(-fなど)で、ファイルが存在しなかった場合の 回避はできるのか? 3.その他の方法にてプログラムが止まることの回避はできるのか? もしくはプログラム上にエラーがあるのか? ぜひ回答よろしくお願いします。
- masanori_o40
- お礼率82% (409/498)
- その他(OS)
- 回答数3
- ありがとう数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 を実行する、 >というふうにスクリプトを書けばよいでしょう。 このやり方でプログラムを記述した所、問題解決しました。 ありがとうございました。
関連するQ&A
- WindowsXPでcompress(Z形式)で圧縮する方法
テキストデーターをUnixのcompress(Z)の拡張子で圧縮しなくてはいけないのですが、Cygwinにて圧縮を行おうとしたところcompressが存在しないとメッセージが表示されましたzg形式では圧縮出来るのですが、compress(Z)で圧縮しなくてはいけないので、フリーソフト等を探しても解凍ソフトはあるのですが、圧縮ソフトは存在しません。どなたか方法を知っている方がおりましたら教えてください。
- ベストアンサー
- Windows系OS
- solaris7でのcompress
いつもお世話になっております。 solaris7のcompressコマンドについて質問です。 compressに -f のオプションをつけても、戻り値が2で返ってきてしまいます。(圧縮したファイルが圧縮前のファイルより容量が大きい場合)。 manでcompressコマンドを確認しても、オプションで -f を使用した場合は、戻り値が2で返ってくることはなさそうなんですが・・・・・。 > ls -l file.txt -rw-r--r-- 1 zz001 zz001 0 Mar 24 21:06 file.txt > > compress -cf file.txt > file.txt.Z > > echo $? 2 > > ls -l -rw-r--r-- 1 zz001 zz001 0 Mar 24 21:06 file.txt -rw-r--r-- 1 zz001 zz001 3 Mar 24 22:12 file.txt.Z ちなみにwhichコマンドで/usr/bin/compressでした。 Solaris8では同様の処理をすると戻り値は0でしたが、どうにもわかりません。solaris7特有の動きなのでしょうか?
- 締切済み
- Solaris系OS
- findとxargsの使い方で
unixで、findとxargsを使って検索を行っています。 以下の様に、 find . -type f | xargs コマンド 例えば、 find . -type f | xargs ls -l を実行すると、 「xargs: 入力ファイルが壊れています。: バイトシーケンスが正しくありません。」 が出力されます。 何が原因なのでしょうか。 また、解消方法はどのようにすればよいのでしょうか。 環境は solaris10 LANG=ja_JP.UTF-8 sh or bash
- 締切済み
- その他([技術者向] コンピューター)
- AIX kshスクリプトのtar+compressを1行で書く方法について
こんにちは。はじめまして、hisatoと申します。 AIX kshスクリプトのtar+compressについて 質問がございます。 基本は下記の通りで問題なく完了するのですが、 # アーカイブ処理 tar -cvf - <固める対象のファイル名> | compress >圧縮ファイル名.tar.Z 下記の処理にすると、エラーが発生してしまいます。 tar -cvf - -L <固める対象のファイル名リスト> | compress >圧縮ファイル名.tar.Z tar: 次のフラグにはパラメータが必要です: L 使用方法: tar -{c|r|t|u|x} [-BdFhilmopsvw] [-Number] [-fFile] [-bBlocks] [-S [Feet] [Feet @Density] [Blocksb]] [-LInputList] [-NBlocks] [-C Directory] File ... -Lを使用する場合は、-オプションを使用して新規アーカイブ・ファイルを作成し、 そのアーカイブ・ファイルをcompressに渡すことはできないのでしょうか? 以上、ご教授お願いいたします。
- ベストアンサー
- その他(プログラミング・開発)
- マクロ FINDについて
いつも回答して頂きありがとうございます。 ネット等で調べましたがさっぱり分かりません。指定した文字が下から数えて2番目にくる場合の記述方法について教えて頂けないでしょうか?宜しくお願い致します。 Find("定期", , xlValues, 1, , 2) のどこを変えたらよろしいでしょうか?
- ベストアンサー
- オフィス系ソフト
- unixのfindコマンド
unixのfindコマンドで、ある複数のディレクトリから指定のファイル名だけを 検索し、その結果をgrepしたいのですが、 例えば 01_dir 02_dir : 11_di : 21_dir : と言うディレクトリがあります。 そこから、「0」で始まっているディレクトリの中なら拡張子が*.txtを 検索し、その検索したファイルに対して、grepを実行したいのですが、 上手くいきません。 もちろん、各ディレクトリには、「.txt」以外のファイルもありますし、 ファイル名にも条件を付与したいです。 以下の様に、 find . -name "0*_dir" -type d -print | xargs ls -l *.txt | grep "検索文字" find . -name "0*_dir" -type d -print | xargs ls *.txt | grep "検索文字" find . -name "0*_dir" -type d -print | xargs -i ls -l '{} /*.txt' | grep "検索文字" find . -name "0*_dir" -type d -print | xargs -i ls {} "検索文字" とやってみたのですがだめでした。 find ./ -type d \( -name '1_*dir' -o -name '2*_dir' -o -name '3*_dir' \) -prune -o -type f -print と「-prune」で除外するディレクトリを指定すればできなくはないですが、 すべてのディレクトリ書くのはいい方法ではないです。 よい方法をお願いします。 OSは、Solaris 11.3です。
- ベストアンサー
- Solaris系OS
- findコマンドの挙動について
いつもお世話になっております。 シェルで3か月前のファイルを削除するようにしたのですが実行すると想定と異なる挙動になり困っております。 シェル自体は他の同バージョンのOSで実績があり問題なく動作したのでこの環境のみ挙動が違うのが分からない状態です。 以下の定義で処理を行っております。(一部パス等は変えております。) find ${logfile}* -daystart -mtime ${days} -exec rm -f {} \; 変数「logfaile]」には別ファイルで設定しているファイルパスが入ります。 変更「days」には別ファイルで設定している日数(今回は3か月なので+93)が入ります。 sh -xで実行したときの結果が以下になります。 find 対象ファイル名 -daystart -mtime $'+93\r' -exec rm -f '{}' ';' ' から `-mtime'な引数 `+93 対象の日数の部分でうまく値が取得できずその部分がエラーになってしまっています。 何かお気づきのことがありましたらアドバイスの方よろしくお願いいたします。
- ベストアンサー
- Linux系OS
- シェルで12時間前のファイルを消す方法
こんにちは。UNIX(HP-UX)のPOSIXシェルで質問です。 指定したフォルダの中の「現在時刻より12時間前のタイムスタンプのファイルを消す」方法はないでしょうか? findコマンドは24時間の倍数しか検索できないので、12時間前は指定できません。 12時間以上前のファイルは、すべて消えてかまいません。(例えば15時間前のファイルなど) できれば抽象的な説明ではなく、具体的で、すぐに動くコーディングを記述して下さると助かります。 以上宜しくお願い致します。
- ベストアンサー
- Solaris系OS
- 4GB弱のファイル等を日次で自動的に圧縮するバッチファイルを作成したい
趣味のコーディングをしているのですが、プログラム中で、あるファイルを圧縮する必要が出てきました。 要件は以下の通りです。 1.圧縮対象は、4GB弱のファイルを2つ と、 1GB弱のファイルを1つ と、 50MBのファイルを1つ(must条件) 2.できれば、1.の4つのファイルを1つのファイルにまとめたい(need条件) 3.圧縮の命令は、バッチファイル(~.bat)に記述し、日次で自動実行したい(must条件) ※3.の自動実行については、WinXP標準機能の「タスク」を使ってバッチファイルをキックする予定 4.圧縮後のファイルには何らかのファイル名を指定したい(must条件) いろいろと調べて下記の3つを試したのですが、それぞれに記述した理由でダメでした。 A:zip.vbs ファイルが大きすぎるらしく、上記の4GB弱のファイルを含めて圧縮しようとするとエラーになる。 B:makecab 圧縮後のファイル名を指定できない。 C:lhaz(コマンドライン) コマンドラインから起動したところ、GUIのメニューが出てきてしまい、自動実行できない。 何らかの形で、上記要件を満たす形で圧縮をできないでしょうか。 なお、lhaz(GUI)でzip圧縮を試してみたところ、圧縮後のサイズは900MB程度でした。 また、圧縮形式に拘りはありません。それなりにサイズが小さくなれば、形式はなんでも良いです。 ご回答よろしくお願い致します。
- 締切済み
- その他([技術者向] コンピューター)
- エクセルマクロ・Cells.Find のエラー
VBA初心者です。 ファイルA の C列 に入力されているデータが ファイルB に含まれているかどうか検索するマクロを Cells.Find を使って作ろうとしています。 データがファイルBに存在する場合は問題ありませんが存在 していない場合エラーが出て止まってしまいます。 ヘルプを見ると「セルが見つからなかった場合は、Nothingを返します」 と書かれていますが、どうもNothingとは返ってきません。 このエラーを回避する方法を教えてください。 例えばこんなマクロを組みました。 For tate = 0 To 19 Windows("ファイルA.xls").Activate Range("C1").Offset(tate, 0).Select データ = Range("C1").Offset(tate, 0) Windows("ファイルB.xls").Activate Cells.Find(データ, MatchCase:=False).Activate Next tate 例えば最後の2行を 結果 = Cells.Find(What:=ISISDate, MatchCase:=False).Activate MsgBox (結果) Next tate とするとデータが含まれている場合は「True」と返ってきますが、 含まれていない場合は MsgBox が表示される前にエラーとなってしまいます。 とりあえずこのエラーを回避する方法をご存知でしたらお教えください。
- ベストアンサー
- オフィス系ソフト
お礼
回答ありがとうございます。 if文の条件として空白とすればよかったのですね!! 問題解決しました。ありがとうございました。