destroy and seek ...

seek and destroy

タイトル考えていたら,この言葉が浮かんできた.そう metallica.小学生の時分,初めて聴いた時その音の衝撃で高校に入るまでは夢中で聴いてたけど,以来全く興味を失って...で今思うといいもんですね(恥 妙に聴きたくなり itunes 掘ったら持ってない.今始めて気づいた.あれ? 持っていなかったけ?

Seek & Destroy

Seek & Destroy

この曲,ライブがかっこいい.イントロで james がメインリフに入るとき,Oi!,って言うとこ.
と思い出しながら,ライブラリーにある master of puppets を聴いていたらシャッフル入っていて,今 guided by voices の "mute superstar" がかかってる.いい曲すぎる.泣きそうだ....

Mag Earwhig

Mag Earwhig

guided by voices 来日しないかな.*1

んな話じゃない.

ちょっと前,ポインターの暴走を鎮めるためにバックアップディスクを生贄にした話をしましたが,それに関連したお話.

何もする気が起きない夜をやり過ごすために,やり過ごしていたリストを頭ん中に.
そこでこの日は,ダメもとでも何とかならんもんか,と消去データの復旧について手を出してみることにしました.

本当に何も期待していません.ホンキで. 復旧アプリを探すところから始めるのですが,正直,有料ソフトしかなかったら,もうこの作業は止めるで,いいと思っているくらい.

で出遭ったのが.

PhotoRec

結論から言うと,よく出来る子だと思います.

PhotoRec - CGSecurity

この時点安定版でのバージョンは 6.13.

gui はありません.
幾つか採りあげているサイト見た中で gui がないことに残念言う人が少なくないみたいですね.個人的に,cui に抵抗ないので気になりませんでしたが.ね,いいじゃんねタダなのだしw

詳細な使い方について触れたサイトは幾つかあるのですが,個人的にはこちらのサイトが一番助かりました.os が mac での話だったというのもあり.感謝であります.

つわものぶろぐ Macで使えるリカバリーソフトの'PhotoRec'を試してみた

ちょっと違ったのは,ここくらい?

ここで1つ疑問なのが、Windowsなどの操作マニュアルを見ると"保存場所"指定の前に、検索範囲(Free=空き領域 or Whole=ボリューム全体)の指定が出来るはずなんだけど、今回使用したバージョン(?)では選択肢が出てこない...。orz

バージョンの違いのせいか,ここでは安定板とされている 6.13 の方を使ってますが,自分がやったときはありました.
で逆に,どれを選んだらいいか迷って,戸惑ったとこなのですが(笑

ドライブも外付けだし,いいかっと,
検索対象の選択間違ってメンドクセなるよりいいかと Whole を選んで,だらーんと構えることにしてました.
ちなみに対象ドライブの容量は 500gb.

待つこと約 2 日 :P

あ,そうそう.
個人的にちょっと困ったのが,対象とするファイルタイプの選択. 選択したのは,[x] で本当にいいのかが気になって(笑...結果,それでいいのですがね.*2

[x] の状態が,チェック "on" の状態.ということで.

あと参考程度に.
ファイルタイプのアイテム数はやっぱり結構あるもので,この結構なアイテムの中から,ひとつひとつ都度,確認&選択という作業が必要となります. こういうのが個人的に苦手で...
対象とするファイルタイプが決まっている場合は,一度 [s] キー押下で,デフォルトの全選択状態を解除 "off" にしてから,選択 "on" していく,と言う手続きを採った方が良いと思います.

で,2 日経って.出来ました.こんな感じ.

階層やファイル名はダメなのは知っていたし,それでもいいと思っていたので...

さてここから本番.
欲しいデータをどう拾うか,ですね.

mdfind でやる

実は,売っちゃって手元を離れた映画 dvd のリッピングが結構あり,それだけが惜しい,というのがありました. そしてこれこそが復旧を考えるキッカケでありました.

なので,ある容量を超える mov ファイルは? で引っ掛けられれば良いかな,と思っていたわけです.

ファイル検索のコマンドとなれば,自分の場合,"mdfind".

メタデータ属性は,容量だと 'kMDItemFSSize',再生時間だと 'kMDItemDurationSeconds'

幸い,これまでの作業で,容量の情報を見るのには 'kMDItemFSSize' というメタデータ属性を見れば良くて,それを query でぶつけてやれば良い,というイメージはボンヤリできていました.

mdfind -only /target/dir "kMDItemFSSize >= 0000 && kMDItemKind == 'filetype'"

あるいは,容量だけじゃなく,何か長さで見れるのもあるみたい.'kMDItemDurationSeconds'.

mdfind -only /target/dir "kMDItemDurationSeconds >= 0000 && kMDItemKind == 'filetype'"

参考に,同じような mov ファイルのメタデータ属性を,手っ取り早く mdls で確認してみます.;

% mdls /Users/*snip*/Desktop/recovery/recup_dir.15/f268509592_ftyp.mov
kMDItemAudioBitRate            = 63
kMDItemAudioChannelCount       = 1
kMDItemCodecs                  = (
    "H.264",
    AAC
)
kMDItemContentCreationDate     = 2013-02-13 01:10:44 +0000
kMDItemContentModificationDate = 2013-02-13 01:10:45 +0000
kMDItemContentType             = "com.apple.quicktime-movie"
kMDItemContentTypeTree         = (
    "com.apple.quicktime-movie",
    "public.movie",
    "public.audiovisual-content",
    "public.data",
    "public.item",
    "public.content"
)
kMDItemDateAdded               = 2013-02-13 01:10:45 +0000
kMDItemDisplayName             = "f268509592_ftyp.mov"
kMDItemDurationSeconds         = 49.605
kMDItemEncodingApplications    = (
    "4.0.1"
)
kMDItemFSContentChangeDate     = 2013-02-13 01:10:45 +0000
kMDItemFSCreationDate          = 2013-02-13 01:10:44 +0000
kMDItemFSCreatorCode           = ""
kMDItemFSFinderFlags           = 0
kMDItemFSHasCustomIcon         = 0
kMDItemFSInvisible             = 0
kMDItemFSIsExtensionHidden     = 0
kMDItemFSIsStationery          = 0
kMDItemFSLabel                 = 0
kMDItemFSName                  = "f268509592_ftyp.mov"
kMDItemFSNodeCount             = 22139607
kMDItemFSOwnerGroupID          = 20
kMDItemFSOwnerUserID           = 0
kMDItemFSSize                  = 22139607
kMDItemFSTypeCode              = ""
kMDItemKind                    = "QuickTime ムービー"
kMDItemLogicalSize             = 22139607
kMDItemMediaTypes              = (
    Video,
    Sound
)
kMDItemPhysicalSize            = 22142976
kMDItemPixelHeight             = 640
kMDItemPixelWidth              = 480
kMDItemProfileName             = "SD (6-1-6)"
kMDItemStreamable              = 0
kMDItemTotalBitRate            = 3560
kMDItemVideoBitRate            = 3496

kMDItemKind ははやりローカライズされてますw "QuickTime ムービー".うーん...

ということで,こうなりました.;

% mdfind -onlyin /Users/*snip*/Desktop/recovery/ "kMDItemKind = 'QuickTime ムービー' && kMDItemDurationSeconds >= 30"*3

やってみる. うん,おうけい.

mdfind で取ったファイルを,どっかに退避したい.だとこれ? "xargs"

mdfind でファイルを取得するところまではできました.

さて,今度は中身を確かめ,要る要らないを決めていきたいのですが.

mdfind がターミナルに吐きだした結果をひとつひとつ確認し,
ファインダーに行ってそのディレクトリを探して移動,そしてファイルを探して...はさすがに狂っているので,取得したファイル達をどこかひとまとめにしたい.

いつもの馬鹿さらしの勝手なイメージ,得意技だ,だと,mdfind ... | while read ... みたいな (笑

と,ヒットしたのがこちら. ;

結局 mdfind を利用: $ mdfind -0 -onlyin ~ "(kMDItemDisplayName !='.' && kMDItemKind = 'JPEG イメージ')" | xargs -0 -I % mv -i % %.jpg

xargs ?

コマンドに多くの引数を渡すときに便利なコマンドである。非常に長い引数のリストはコマンドに渡すことが出来ない[1]が、xargsを使うことによって引数リストをシステムが受け入れられるサイズに分割してコマンドに渡してくれる。

なるほど.

ということでこうなりました.

mdfind -0 -onlyin /Users/*snip*/Desktop/recovery/ "kMDItemKind = 'QuickTime ムービー' && kMDItemDurationSeconds >= 30" | xargs -0 -J % cp % /Users/koo/Desktop/recovery/mov

xargs についてはコチラがとても参考になります.感謝です.

念のため,消えて欲しくない情報ですので,ふーんと思ったのだけでもメモ.あえて誤解承知で自分の言葉で記載します.正しい情報を知りたい場合は,是非参照先を.;

  • オプション '-0'*4 は,パスにスペース (改行も?) がある場合,スペースで区切らない.*5
  • オプション '-t' は,xargs での処理の内容を出力してくれる.
  • オプション '-J' は,引数の渡し方を1つずつではなく,一度にどさっと渡してくれる.

そしたら,こんなコードも見つける.;

mv $(mdfind -onlyin ~/Desktop/fontRm/ "kMDItemContentType == '*ont*'" | sed -e 's/ /\\ /g') /Users/chrihopk/Desktop/target/

何か粋だな,この無骨感,かっこいーな(笑
感覚的にこっちの方が馴染み易かったり(笑.良いか悪いかはよく分らない,個人的な意見ですが.

あ,結局?

コマンドから消したデータは復旧できませんでしたw
やっぱダメみたいですね,あは.

がるるるるる....

*1:あれ? 再結成してなかたっけ?

*2:ほら,os なりその習慣ってありますよね.
そのバックグランドがないと,こんなところで悩むのですね.ある意味貴重な体験.

*3:いやですね,映画だと30秒以上と言う条件は,? と思うでしょうが,実は先ほど何の気無しにサンプルで何の気なしに選択したファイルが携帯で撮った親族の映像だったので,何か一応この系も,と思っちゃって

*4:数字のゼロです.英字の O ではありません.

*5:何もしないとスペースで区切る仕様なので.