• ベストアンサー

dirの差分の取得

シェルスクリプトで2つのdir(下階層あり)の差分をとって差分があるもののみの情報を結果として出力したいのですがいい方法が思いつきません。いい方法はないでしょうか?

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

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.3

> dirの指定を絶対パス指定でおこなわなければならないので結果が非常に見づらいです。 > たとえばdirのAとBの差分を取って以下の様な出力を理想としています。 sedなりawkなりで加工すればよいでしょう。 例えば (dir="/home/hoge"; diff -rq $dir/A $dir/B | sed "s|Files ${dir}/\\(.*\\) and ${dir}/\\(.*\\) differ|\\1 \\2|" )

Kasaoka-Taroh
質問者

お礼

まだ、正解にはたどりついていませんが、なんとか指摘していただいた方法でやりたいことはできそうな見込みがつきました。有益なアドバイスありがとうございました。

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

その他の回答 (2)

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

どうしたいかが今一つはっきりしませんが。 diff の -r オプションは使えませんか? -q と組合わせるとか

Kasaoka-Taroh
質問者

補足

diffコマンドの出力はだいたいはいいのですが、問題点がいくつかあります。 dirの指定を絶対パス指定でおこなわなければならないので結果が非常に見づらいです。 今やりたい差分はdirの構成はほぼ同じでdirの増減を表示する方法はなんとか作れたのであとは差異があるものの表示をおこないたいと思っています。 たとえばdirのAとBの差分を取って以下の様な出力を理想としています。 差異があるもの   A/aa/aaa   B/aa/aaa 差異のないものは非出力

全文を見る
すると、全ての回答が全文表示されます。
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

>差分をとって差分があるもののみの情報を結果として出力 ここでいう差分はファイル名のみチェックなのでしょうか? それともサイズや時間やパーミッションまでチェックするのでしょうか? また出力とは標準出力すればいいのでしょうか? おそらく「rsync -avn」あたりを利用するのが手っ取り早いと思います (標準コマンドではないですがインストールしておくと便利)

Kasaoka-Taroh
質問者

補足

言葉足らずの説明で申し訳ありません。”差分をとって差分があるもののみの情報を結果として出力”と言っているのは dirの差分なので差異があるかないかのチェックしかできないと認識しているので差異のあるdirのリスト出力(サブdir含む)とdir内にテキストファイルがあればその中身の差分が出力されればベストです。

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

関連するQ&A

  • cronを使ってis_dir関数がうまく動かない

    cronを使用して、ディレクトリが存在した場合には、あるスクリプトを実行するようなスクリプトを考えています。 【sample.php】 <? $search_dir = "./SCH_Dir"; if(is_dir($search_dir)) { echo "Dir"; } else { echo "Not Dir or Not Exist"; } ?> sample.phpとディレクトリ SCH_Dirは同一の階層に配置してあります。 上記のsample.phpをWeb上で実行すると、出力結果は "Dir" となり、ディレクトリの存在のチェックが出来ています。 このsample.phpをcron設定した場合、出力結果が "Not Dir or Not Exist" となり、存在していない、という結果が返ってきてしまいます。(結果をメールで受けてっています) なぜcronで実行した場合と結果が違うのか、原因が分からず困っています。 どなたか解決法をご教授ください。 宜しくお願いします。

    • ベストアンサー
    • PHP
  • dirに追加されるファイルを別のdirにコピーする

    質問させて頂きます。 OSはFreeBSDです。 あるディレクトリ(以下、dir1)にファイルが作られていきます。ファイルは不定期に作られ、また不定期に削除されていきます。このdir1にファイルが作られたら、別のディレクトリ(以下、dir2)にコピーしていきたいのです。つまり削除されるファイルを別のところにためておきたいのですが、どのような方法があるのかわかりません。 勉強していますが、シェルスクリプトも殆ど書いたことがないので、方法やコマンドなどが想像出来ません。ヒントだけでもいいので教えていただけませんか?

  • AWKにて時刻差分を取得したい

    お世話になります。 現状、以下のログがあるのですが、 <snip> 日時, 通信開始時刻, 通信終了時刻・・・ 2008/4/8, 14:00:00.3, 14:10:00.5, ・・・ <snip> で、AWK(awk -F , )にて時刻差分を取得したいと考えたのですが、 $3-$2の出力結果が"0""-1"になり、表示されません。 うまく時刻差分を取得する方法はないでしょうか。 よろしくお願いいたします。

  • dirコマンドで取得した結果を加工したい。

    お世話になります。 windows上のディレクトリ及びファイル情報を一括で CSV形式で出力したいと思っています。 ご教示ください。 【CSV出力要件】 1カラム目:ディレクトリ若しくはファイルの日付       出力例       (時刻)2017/06/14 17:12 2カラム目:ディレクトリのパス・ファイル名を記載       出力例       (デイレクトリの場合)C:\testdirectory       (ファイルの場合)C:\testdirectory\test.txt 3カラム目:ディレクトリサイズ、ファイルサイズを記載       ディレクトリの場合、配下全ての容量を記載       ファイルの場合、そのファイルサイズを記載 4カラム目:ファイル拡張子を記載 5カラム目:ディレクトリの場合は、Directoryと記載       ファイルの場合は、Fileと記載       ショートカットの場合、shortcutと記載 【設計要件】 ・[dir /S]コマンドで、Windows上のディスク情報を取得する。 ・Linuxのbashで取得結果をCSVに出力する。  ※上記、CSVに出力するファイル名は、windows_dir.csvとする。 ・CSV出力のカラムは前記の通りとする。 ・Dirコマンドで出力される下記を削除する。  1)〇〇個のファイル~バイト(省略)  2)[dir /S]取得結果のファイルの総数:(省略)は削除する。     [dir /S]取得結果の個のファイル~バイト(省略)は削除する。     [dir /S]取得結果の個のディレクトリ~バイトの空き領域(省略)は削除する。  3)[dir /S]取得結果の<DIR>の記述は削除は削除する。  4)ディレクトリの個数をテキストファイルへ出力する    ファイルの個数をテキストファイルに出力する。    個々の拡張子毎にその拡張子の個数をテキストファイルに出力する。    ※上記出力するテキストファイル名は、kakuchoushi.txtとする。  5)[dir /S]取得結果の空白行は削除する。  6)取得時は、開始時刻、終了時刻を記載する。  7)出力結果の文字コードはSJISになっているため、UTF-8に変換する。  8)出力結果の改行コードはCRLFになっているため、LFに変換する。 【留意点】 ・新たに取得し直せばいいのですが、既存の取得済み結果から、  結果を取り出したいと思っております。  ※取得し直しのコメントは無しでお願いいたします。m(_ _)m よろしくお願いいたします。

  • 作業ファイルの差分を抜き出す方法

    大量のHTMLの作業をした際に、その作業したファイルをフォルダ階層を維持したままコピーする方法はないでしょうか? フリーソフトなどで、差分をチェックしてフォルダを同期するものはよく見かけるのですが、差分をそのままどこかへ抜き出すという物は見つけられませんでした。 ファイル数が少ない場合は、手作業で差分をコピーしますが大量になってくると抜き出しも大変です。特に細かくフォルダわけしてあるとなおのことです。 アドバイス・情報お願いします。

    • ベストアンサー
    • HTML
  • コマンド「dir」の結果を、テキストに出力

    batファイルを使用して、「dir」コマンドの結果を、既存のテキストファイル「dir.log」に出力したいのですが、実装方法を教えていただけないでしょうか? 詳細: ・dirバッチ:C:\work\dir.bat ・ログファイル:C:\work\dir.log ・dirで出力したいフォルダ:D:\work\配下 以下のリダイレクト?を使用して上書きしたいです。 dir >> dir.log どうか、ご教授お願いいたします。

  • DOSコマンドでのDIRコピー

    DOSコマンドでdirの階層構造を保持したままあるdirの下階層全てをあるdirの下へコピーするにはどのようにすればいいのでしょうか? 例えば、dir-aの下にdir-b1、dir-b2が存在している場合dir-aを全てdir-c の下へコピーしたいということです。(できれば1コマンドで)

  • opendir dir

    opendir dir , "folder名"; とすると、フォルダの中身を取出すことができますよね。 このときのフォルダ名を直下のフォルダではなく、階層が別のところにあるフォルダも指定可能なのでしょうか? 今まで直下のフォルダは無事できていたのですが、フォルダの階層を変えたところ、動作しなくなりました。 opendirが問題なのか、それともフォルダの指定が間違っているのかもわからないので、 可能なのかどうか、教えてください。

    • ベストアンサー
    • Perl
  • UNIXのシェルスクリプト

    UNIXのシェルスクリプトで以下のようなことをやりたいのですがいい方法を教えて下さい。 ファイルの中にある文字列があります。 たとえば”CURREND_DIR” この文字列をシェルスクリプトでカレントのディレクトリパスに変換したいのですが いい方法が思いつきません。 set dir_data = ‘pwd‘ sed -e ’s/CURRENT_DIR/$dir_data’ ファイル名 でできるかなと思ったのですが、”CURRENT_DIR”が”$dir_data”に置換されてしまいます。 さらにdirパスが”/”で区切られていることも問題のようです。

  • UNIXで2つのdir内のファイルのチェック

    UNIXで2つのdir内に存在するファイルのチェックをやりたいのですが なさけないことにいい方法が思いつきません。 具体的にはDIR-A内に存在するファイルが全てDIR-B内に存在するか どうかをチェックして存在してないものを出力といったことです。 方法はUNIX上で実行できればとくに問いません。