水曜日, 12月 19, 2007

findコマンド

(まだまだ)続く。

取り敢えずやったことを思い出すために、作業ディレクトリ内の全ファイルを時系列順に眺めてみようと思ったのです。

でfindコマンドを使って特定の日時・期間のファイルリストを見ようと思ったのです。-mtimeを使えば今日から指定日数以前・以降のファイルリストを抽出できるわけですが、指定期間を抽出するために-mtimeを2つ以上指定しても機能しません。
それならと、findコマンドで抽出したファイルリストを再びfindリストに渡してあげようと、xargsコマンド越しにそのまま渡すと「パスを評価式の後に書くんぢゃねぇー」と怒られます。

以前は良くやっていた作業のはずなのですが、老化の進んだねこさんは思い出せません orz
しばし悩んだ結果思いついたのは \$ find . -mtime +8 -print0 | xargs -0 -i find {} -mtime -10 みたいなの。
もう忘れても困らないように書いておこう…と思ってこれを書いていたら、2つ程度を連結するだけなら、 \$ find \`find . -mtime +8\` -mtime -10 -printで十分なことに今頃気が付いた。orz
多分今までそうしていたんだと思う。

でも、上記方法の方が3つ以上並べられるし、抽出条件を単純に並べられていいかな?とも思うのです。

後は一定期間のファイルを時系列順に並べてリストするには \$ ls -ltr \`find . -type f -mtime +8 -print0 | xargs -0 -i find {} -mtime -10 -print\`とか。 \$ find . -type f -mtime +8 -print0 | xargs -0 -i find {} -mtime -10 -exec ls -ltr {} \;でいいかな…と思ったけど、ちゃんと時系列順にならない。

後は日数計算だけど、Rubyを使ってこんな感じで↓
\$ ruby -e 'require "date"; print "#{Date.today-Date.new(2007,4,1)}\n"'
参考: http://ja.wikipedia.org/wiki/Xargs

0 件のコメント: