• ベストアンサー

過去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週間に更新されたログだけをコピーする方法はないでしょうか。  よろしくお願いいたします。

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

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4854/10269)
回答No.2

事前に、old/aDir、old/bDir、old/Cdirを作っておいて、 cd path/logdir find . -type f -mtime -7 -exec cp -p {} Path-to/old/{} \; がわかりやすいですかね。 あるいは、 cd path/logdir find . -type f -mtime -7 -print | cpio -pd Path-to/old/ だと、事前にサブディレクトリを作る必要がないですが、cpioは機能の多いコマンドなので初心者は避けた方が良いかも。

annyG
質問者

お礼

あ、そうですそうです。cpioを使うことにしました。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • wolf03
  • ベストアンサー率22% (241/1086)
回答No.1

・findとコピーを各ログのディレクトリに個別に行う ・シェルにして、find結果を一個ずつパスチェックしてコピー

annyG
質問者

お礼

ありがとうございました。 結局cpではなく、cpioを使うことで解決することにしました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

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

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

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

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

  • XCOPYで1階層目のフォルダ名のみコピーする

    XCOPYで1階層目のフォルダ名のみすべてコピー (その中のファイルはコピーしない) 方法を調べたのですが、サブディレクトリをコピーする オプションは見つけましたが 1階層目のディレクトリのみをコピーする方法はありますか? xcopy 送り元 送り先 /T までは調べました 使用しているOSはWINDOWS8.1です。 よろしくお願いします。

  • findで7日前のディレクトリを検知、そのディレクトリを消したい。

    findオプションで質問です。 7日以前のディレクトリ/ファイルを検索して消したいです。 find ~ -mtime +7 -type -df -exec rm -df {} なんて感じで宜しいのでしょうか。 -df というように、ディレクトリ/ファイルを両方いっぺんに 指定できますか? 宜しくお願いいたします。

  • findして名前を変えてコピー(redhatlinux)

    初心者で2~3日前からシェルを作っています。 環境:redhatlinux5 AAAディレクトリにある*.txtを全て探して BBBディレクトリに*_mmdd.txtに 名前を変えてコピーしたいのですが どのように書いたらよいのかわかりません。 名前を変えずにそのままコピーは以下のように すればできたのですが・・・ find /AAA -name "*.txt" -exec cp {} /BBB\; そこから先がわからないのでよろしくおねがいします。

  • 1週間経過したファイルを削除 かつ最新のファイルは残しておきたい

    こんばんは、初投稿になります。 現在Linux系サーバのファイル管理を行っているのですが /tmpディレクトリに定期的ファイルが作成される設定にしております。 そこで1週間以上経過したファイルは削除し、かつ最新のファイルは 1つは残すような仕組みにしたいのですが…cronに登録し find /tmp -mtime +7 -type f -exec rm -fr {} \; をしてみたのですが、10日更新されなかった場合は全てのファイルが消えてしまいます。最新のファイルだけは残せる方法をご存知でしたら 教えてください。 よろしくお願いします。

  • 日付ファイルを検索して結果を変数に入れたい

    LOGDIRディレクトリにYYYYMMDDhhmmss.log形式のログファイルが複数あります。 ここから当日日付のログファイルを取り出して、順番に処理にかけたいのですが、 うまく行きません。どなたかご支援願えますでしょうか? LOGDIRディレクトリのファイル ====================================== 20120401093020.log 20120402093020.log 20120403093020.log 20120404093020.log 20120405093020.log 20120405123000.log ====================================== 以下、作成したバッチです。 ====================================== set RESULT= set DAY=%date:~-10,4%%date:~-5,2%%date:~-2,2% set LOGDIR="J:\Temp\log\" set TLOGDIR="J:\Temp\tmp\aaa\" REM set TFILE=`dir /B %LOGDIR% ^| findstr %DAY%.` echo %TFILE% for /f "usebackq tokens=*" %%i in (`dir /B %LOGDIR%^| findstr %DAY%.`) do (set RESULT=%%i) xcopy /y %LOGDIR%%RESULT% %TLOGDIR% ====================================== 実行日が20120405だとした場合、20120405093020.logと20120405123000.logを処理したいのですが、 20120405123000.logしか処理されません。 2つとも処理したい場合はどうすれば良いでしょうか? よろしくお願いします。

  • シェルスクリプトで、コピーする際に、特定の名前のディレクトリを除外

    シェルスクリプトで、 あるディレクトリ(原則として、配下のディレクトリ・ファイルもすべて)を別の場所へコピー(上書きコピー)したいのですが、それに関して質問します。 仮に、dirAという名前のディレクトリを、それに対応するdirBというディレクトリへ上書きコピーするということにします。 dirAとdirBは、似たディレクトリ構成を持つと、イメージしてください。(対応するディレクトリがあるとは限らないが。) dirAディレクトリを単純にコピーするならば、cpコマンドの -R オプションを使えばいいと思います。 しかし、dirAディレクトリ配下のうち、ある特定の名前(固定)を持つディレクトリ(そこにあるファイルも。)はコピーしたくないのです。そのためには、どうすればよいのでしょうか。 仮に、そのコピーしないディレクトリの名前をTaroとすると、私は、次のようにすることを考えましたが、これは意図どおり動きません。 find dirA ! \( -name "Taro" \) -a -type d -exec cp -R {} dirB \; 尚、次のことがわかっています。 ・このディレクトリTaroは、dirAやdirBの配下のいろいろなディレクトリに散在する。 ・このディレクトリTaroの配下には、ディレクトリは存在しない。(dirA・dirBのいずれでも。)

  • データだけをコピーする方法

    定期的にサブディレクトリ内のファイルだけを、別のフォルダにコピーしたいと思います。 例えばコピー元ディレクトリaaaには、次のように階層化されていると仮定します。 aaa--aaa1--aaa11 aaa2--aaa21 aaa3--aaa31 --aaa32 このaaa配下に存在するすべてのファイルだけを 別のディレクトリbbbにコピーしたいのですが、bbbの中にはサブディレクトリは存在しない状態でファイルだけにしたいのです。 DOSのxcopyコマンド辺りを使うのだろうかと思ったのですが、このような方法の場合のオプションが分かりません。 何か良い方法はありますでしょうか? バッチを作ってコピー

  • 2チャンネルの過去ログ?

    どうしても調べたいことがあって初めて2チャンネルにいきました。 それらしいスレを見つけたのですが、古いもので『このスレッドは過去ログ倉庫に格納されています』と書かれていました。 2チャンネル内の利用方法を見ても過去ログの見方がわかりません。 専用ブラウザを落として有料の壷を買う??とか?ドル建て? 過去ログを見るのは有料なのでしょうか?  有料ならそれも仕方がないなと思うのですが、悲しいかな操作方法がまったくわかりません。 どなたか、手取り足取り教えて頂けないでしょうか? 宜しくお願いします。