• ベストアンサー

findコマンドで複数条件を設定する方法

findコマンドを使用して、最終更新日から10日以上経過しているかつ、拡張子が.gz 以外のファイルを圧縮する方法を教えていただきたいです。 それぞれ1つの条件を満たすコマンドはわかるのですが、2つの条件を満たすコマンドをどの様に作成すればよいかわかりません。 最終更新日から10日以上経過したファイルを圧縮 find . -mtime +10 -exec gzip {} ¥; 拡張子が.gz意外のファイルを圧縮 find . -name "*.gz" -prune -o -type f -print -exec gzip {} ¥; よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4846/10257)
回答No.1

この例であれば、拡張子gzのファイルにgzipコマンドを実行しても何も起こらないので、 find . -mtime +10 -exec gzip {} ¥; だけで十分です。警告メッセージを出したくなければ、 find . -mtime +10 -exec gzip -q {} ¥; 質問にそのまま答えると、 ind . -name "*.gz" -prune -o -type f -mtime +10 -exec gzip {} ¥;

daisuki1192
質問者

お礼

ご回答ありがとうございました。 環境の違いからか、回答していただいたコマンドでは想定の結果が得られず、最後に-printを追加すると想定の結果を取得することができました。

関連するQ&A

  • find -exec cp中にファイル更新すると

    find文についての質問です。 findオプション-exec cpによってコピー中に、別のファイルを更新すると、そのファイルがコピーされなくなってしまいました。 例えば、 find /tmp -mtime 1 -name "*" -type f -exec cp … により/tmp直下のファイルをコピー中に/tmp/a直下のファイルを更新すると、そのファイルはコピーできないといった結果になります。 findコマンドのオプションによりコピー可能にすることはできるのでしょうか? osはAIXです。 良い方法をご存知でしたら教えて下さい。お願いします。

  • 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 対象の日数の部分でうまく値が取得できずその部分がエラーになってしまっています。 何かお気づきのことがありましたらアドバイスの方よろしくお願いいたします。

  • findコマンドについて

    unix コマンドについて質問です。 ファイル1の中に"A=1" ," B=2", "C=3"という文字列が入っているとします。 ファイル2の中に"D=1" , "E=2", "F=3"という文字列が入っているとします。 そのことを自分は知りません。 Aという文字が入っているファイルを探す為、 以下のfindコマンドを打ち、ファイル1のlsの結果が表示されました。 find ./ -type f -exec grep 'A' {} \; -ls その後、出力されたファイル1の中からBとCでgrepしてB=2", "C=3"を表示したいと思います。 上のコマンドと併せて一度でできるコマンドを教えていただけないでしょうか? 宜しくお願いします。

  • findについて

    findの検索条件で -ctime -mtime の違いが分かりません。 参考書を見ると ステータスが変更されたファイル:-ctime 変更されたファイル:-mtime と書いてありました。 参考となるサイト及び 知っていることがありましたら返答をお願い致します。

  • 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です。

  • findコマンドの場合だけなぜ末尾に{}や\;が必要なのか?

    なぜ findのexecの場合だけファイル名を表す{}や、コマンドの終了を表す\;が必要になるのでしょうか? 他のコマンドはわざわざ終了を明示的に示していないのにfindだけこのような記述をするのが不思議です。

  • unixのfindコマンドについて

    findコマンドでファイルを日付検索をする場合、一日前と検索してもタイムスタンプから24時間単位になってしまいます。単純に日にちが違うだけで検索するにはどうしたらいいでしょうか? 例ファイルpm11:00 を翌日am2:00にfindコマンドで検索したとき3時間しかたってなくても1日前の条件で検索できるでしょうか?

  • シェルスクリプトの記載方法

    linuxでシェルスクリプトを書いています サーバ上に「日付のついた*.bak」ファイルが毎日できています これを3日以上経過した*.bakファイルを消去したいので直接 コマンドラインから次のようにキーボードでたたくと正常に消去できます find /root -name '*.bak' -mtime '+3' -exec rm -f {} \; これをシェルスクリプト(sakujyo.bash)として次のように記載し /rootの中におきました ================(sakujyo.bash)===================== #!/bin/bash find /root -name '*.bak' -mtime '+3' -exec rm -f {} \; =================================================== そして # sakujyo.bash と打鍵すると 次のようにエラーとなります -bash: sakujyo.bash: command not found findのpathが通ってないのかとも考えられるのですが・・・ findコマンドは /usr/bin/ の中にあるので次のように記載してみました =================================================== #!/bin/bash cd /usr/bin find /root -name '*.bak' -mtime '+3' -exec rm -f {} \; ==================================================== このようにしても同じエラーとなります 記載方法等教えていただけませんか よろしくお願いします。

  • findコマンド

    findコマンドを用いて”昨日以降に変更・更新のあったファイル”を検索するにはどうしたらよいでしょうか? ご教授ねがいます。 また、-ctime、-atimeを用いたときの日付の±はどういう意味になるのでしょうか? 上記質問とあわせて教えていただければ幸いです。

  • 未使用で一定期間以上経過したファイルの削除

    未使用で一定期間以上経過したファイル(例えばTemp内にあって一週間更新されていないファイル)を自動的に削除するバッチファイルを作成したいと考えています。 何かうまい方法はないでしょうか? unixでの find /temp -mtime +7 -exec rm {} \; のfindにあたるようなのがあれば非常に助かります。