• ベストアンサー

過去1週間のログだけをコピー

お世話になっています。 週に一度、ログのチェックをしたいと思っていて、過去一週間の間に更新されたログファイルだけを別のディレクトリにコピーするシェルを作ろうと思っていますが、やり方が分かりません。 基本的にはcpコマンドを使用してコピーしようと思っていますが、このようにタイムスタンプによってふるいをかけるようなコピーの方法はあるでしょうか。ls -lの出力をsedなどを使って分解するしかないでしょうか。 よろしくお願いいたします。

  • annyG
  • お礼率70% (67/95)

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

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

findコマンドがそのための物です。 find logdir -type f -mtime -7 -exec cp -p {} otherdir/ \; で、logdir以下のディレクトリにある更新が7日以内のファイルをotherdirにコピーします。

annyG
質問者

お礼

ありがとうございました! findってこんな使い方をするんですね。すごく勉強になりました。

関連するQ&A

  • 過去1週間のログだけをコピー その2

    お世話になっています。 先日こちらで、「過去1週間のログだけをコピー」をするには、という質問をしまして、 > find logdir -type f -mtime -7 -exec cp -p {} otherdir/ \; でできると教えていただきました。  ところが、logが格納されているディレクトリ構成が logDir +- aDir   +- logfile.log +- bDir   +- logfile.log +- cDir   +- logfile.log となっていまして、上記の方法を使うと、logfile.logという複数のログファイルがすべて同じディレクトリにコピーされてしまいます。よって、logfile.logという3つのファイルはその都度上書きされて、最終的に1つしか残りません。  Windowsのxcopyコマンドのように、ディレクトリ階層を保ったまま、過去1週間に更新されたログだけをコピーする方法はないでしょうか。  よろしくお願いいたします。

  • シェルスクリプト内のコピーコマンドが失敗する

    初めて投稿します。よろしくお願いします。 シェルスクリプトの中でcpコマンドを実行していますが、 「Cannot save working directory」というエラーが出力されコピーに失敗します。 同じコマンドを直接(手作業で)実行すると問題なくコピーされます。 このエラーはどのような場合に出力されるのでしょうか?

  • シェル(Unix) ファイル更新を監視する方法がわからなくて困っています。

    ファイルが更新されているかシェルで監視したいのですが、どのようなシェルになるのでしょうか? たとえば、 Aファイルにはフルパスで記述している複数のファイルが記述してあり、その個々のファイルのファイルサイズやタイムスタンプを採取し、 Bファイルに出力させます。 再度、Aファイルを読み込みlsコマンド等の出力結果と、Bファイルの出力結果のファイルサイズやタイムスタンプを見比べて、相違があると メッセージを出力させます。 このような動作のシェルはどのように作るのでしょうか。

  • linux RedHatでコンマ1秒を表示させる方法

    ログに出力されるタイムスタンプはhhmmssの形式で表示されますが、 コンマ1秒を表示させることはできるのでしょうか? loggerコマンドを使ったシェルを作って、ログにシェルの実行結果を書き込むのですが、 その際のタイムスタンプは1秒未満の時刻を表示したいのです。 dateコマンドでは、1秒未満を表示させる引数の記載はありませんでした。 ●デフォルトのメッセージ出力形式 Dec 17 10:49:44 ●希望するメッセージ出力形式 Dec 17 10:49:44.999             ^^^

  • ファイルの所有者だけを得るコマンドは?

    ファイルの所有者をユーザ名で取得するコマンドはないでしょうか。 目的は、シェルスクリプトの中で変数に代入して使いたいからです。 人間が見るためにはls -lでいいのですが、スクリプトの中で使用しようとするとsedで加工したり、ディレクトリ名を指定するとそのディレクトリ自体ではなくディレクトリ内のファイルが対象になってしまったりするので切り分けが面倒です。 ファイルの所有者だけが表示されるようなコマンドがあれば楽なのですが、そのようなコマンドはあるでしょうか? よろしくお願いいたします。

  • シェルスクリプトで古いファイルの自動削除をするには?

    UNIXで以下の仕様を持つシェルスクリプトを作成しようと していますが、どうもうまくいきません。 どなたか、いい知恵を貸していただけないでしょうか? 目的: 特定のディレクトリ内にあるファイルについて、 システム日付より3日前のタイムスタンプを持つファイルを 削除する。 留意点: ・削除対象のファイルは複数存在する場合がある。 ・ファイルサイズは1件あたり 0byte-数百Mbyte となる  可能性がある。 ・ファイル名は不定。 ・スクリプトはBシェルまたはCシェルとする。 参考: ・現在使用しているOSについて  ls -l でのタイムスタンプにおける出力形式は以下のとおり  (デフォルト値?)  ・ 9月 28日 2000年    または   10月 24日 10時45分 知っている限りのコマンドを使っていろいろやってみたんですが、 結局ダメでした。 よろしくお願いします。

  • ディレクトリ以下の全ファイルのコピー

    /src/ディレクトリにあるすべてのファイルやサブディレクトリを/dest/ディレクトリにコピーしたいと思っています。 ただ、次のコマンドでは/src/.dotfileといったドットファイルはコピーされません。 $ cp -Rf /src/* /dest/ このようなドットファイルも含めてすべてのファイル、サブディレクトリをコピーするにはどのようにするのがよいのでしょうか? 次のような方法が思い浮かびましたが、もっとシンプル or スマートな方法がありましたら教えてください。 (a)シェルオプションのdotglobを一時的にONにしてから、上記cpコマンドを実行する。 (b)/src/直下のドットファイルだけ別途指定する。 $ cp -Rf /src/{*,.[^.]*} /dest/

  • bshでのls結果出力内容が途中で途切れる

    初めて質問いたします。 皆さま、どうぞ宜しくお願い致します。 OSはHP-UXで、とあるディレクトリ配下の ls 結果をリダイレクトでファイルに出力させるbshでの話です。 この出力結果ファイルですが、ls -lR で指定したディレクトリ配下すべてを出力する時と、途中までのみ出力される現象が発生しました。 ●シェルのログファイルでは、lsコマンドの実行結果(戻り値)はいずれもゼロ(正常) ●シェルをキックした際、終了すると画面には何らかのメッセージ出力なくプロンプトが表示 ●同じコマンドを手で発行した場合、ファイルには常にls結果が全出力される ●シェルはrootでキック ●ls対象ディレクトリ、ファイルのオーナーはrootではない ●ls対象ディレクトリ、ファイルのパーミッションは全て755 ●ls結果ファイルの出力先ディレクトリのディスク残容量は約32G ●ls結果ファイルのサイズは、全て漏れなく出力された場合は約19M、途中まで出力の場合は約4M 私自身、SHELLの経験値が浅く、基礎的な話でしたらお恥ずかしい限りです。 周囲の経験者の方々にも伺いましたが、私の説明不備でしょうか、解答がみつかりません。 こちらに既存で類似質問がなく、WEBで調べましたがわからず質問させて頂きました。 実は、本日(6/2)の昼過ぎに取引先へ原因報告を求められ、焦っております。 以上の様な状況です。 ご経験のおありな方をはじめ皆さま、どうか御教示ください。 宜しくお願い致します。

  • FTPコマンドで、カレントディレクトリを日付の一番新しいものに移動する方法

    linuxのFTPコマンドについて質問です。 FTPで他のlinuxサーバに入ったあと、  「特定の文字列で始まり、且つその中でも日付が一番新しいディレクトリ」に CDコマンドで移動したいのですが、コマンドでそれを実現することは出来ますでしょうか? lsで表示されたディレクトリの中から目視で新しいディレクトリを探すという ことではなく、シェルの一部に組み込みたいので、 コマンドで対応したいです。 ディレクトリ名は、「○○○1」「○○○2」・・・「○○○5」という 風に「○○○」は同じで数字部分が増えていく形式です。 且つ、一番新しい数字のものが一番新しいタイムスタンプとなっています。 (関係ないディレクトリ「■■■1」~「■■■5」というのも混在しています) なので、dirコマンドで「dir ○○○*」として絞ったあと 日付が最新 or 数字の大きいものというものを抽出した結果を、 CDコマンドに渡せればと思っています。 (方法は問いません) 良い方法があれば、教えていただきたいです。 よろしくお願いします。

  • Windowsのファイル・フォルダのタイムスタンプ

    Windows10ですが、ファイルやフォルダを作成してもすぐに忘れてしまうことがあります。その理由としてあるディレクトリ(フォルダ)\Aのサブのディレクトリ\A\Bを変更したりしても元のフォルダ\Aのタイムスタンプが変更されないということがあるように思います。ディレクトリの深いところで何らかの更新をするとそれが上のディレクトリのタイムスタンプを更新するというような設定はないのでしょうか。 技術的に難しい感じはしないのですが、そうしない理由は何でしょうか。フォルダを作った日にちをいつまでもキープしておきたいということでしょうか。 また、フォルダをコピーするとコピーした日がスタンプされますね。移動はどうなるでしょうか(実験すればすぐですが)。タイムスタンプの考え方とはどのようなことになるでしょうか。また、タイムスタンプの付け方の設定変更はできないでしょうか。