日付の範囲ごとにファイルをリストする方法


4

3日経ったファイルをリストしたいと思います。私はstackoverflowでこれを見つけました:

find . -type f -printf "%-.22T+ %M %n %-8u %-8g %8s %Tx %.8TX %p\n" | sort | cut -f 2- -d ' ' | grep 2012

しかし、コマンド全体の意味がわかりません。短くて簡単に理解できるものがあるのだろうか。

回答:


6

これは動作するはずです

find . -type f -mtime -3

説明

find         find files
.            starting in the current directory (and it's subdirectories)
-type f      which are plain files (not directories, or devices etc)
-mtime -3    modified less than 3 days ago

詳細man findを見る


更新

特定の日時(たとえば、2013年2月20日の08:15)より前に最後に変更されたファイルを見つけるには、次のようなことができます。

  touch -t 201302200815 freds_accident
  find . -type f ! -newer freds_accident
  rm freds_accident

参照man touch (またはinfo touch-うーん!)

これは適度に恐ろしく、より良い方法があるかもしれません。上記のアプローチは、古代およびGNU以外のUnixおよび現在のLinuxで機能します。


赤、ちょうど好奇心、私は今見つけた男を読んでいて、今日より古いファイルだけをリストしたいと思います、daystartそれは正しい選択のようですが、どのようにstart日付を渡すのですか?
ヴァルター・シルバ

@Valter:-daystartオプションは今日の日付を使用します。3月4日08:00に、3月find -mtime +31日08:00よりも前に変更されたファイルを検索します。私が考えるfind -daytime -mtime +30時00分3月1日よりも長い時間前に変更されたファイルを見つける必要があります。
RedGrittyBrick

前のコメントの誤字:s / daytime / daystart /。回答の更新も参照してください。
RedGrittyBrick

0

Findは、-ctimeおよび-mtime +/-引数で間隔をサポートします。

例えば

$ for y in {07..14};do \
  for m in {01..12};do \
  for d in {01..30};do \
    touch -t 20$y$m${d}0101 $y$m$d.file ;done;done;done

$ find . -mtime +0 -mtime -$(( 3 * 365 + 3 )) |sort 
./100304.file
./100305.file
./100306.file
(...)
./130302.file
./130303.file
./130304.file

3年から3日前から1週間前までの間隔でファイルを作成したい場合は、-mtime +7 -mtime -1098を使用します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.