web-dev-qa-db-ja.com

「検索」コマンドで変更された日時を表示する方法は?

findコマンドを使用すると、複数のレベルでディレクトリ名を表示できます。次のコマンドは、/varパスの下のすべてのディレクトリを深さ2で表示します。

find /var -maxdepth 2 -type d;

結果は次のとおりです。

/var
/var/log
/var/log/sssd
/var/log/samba
/var/log/audit
/var/log/ConsoleKit
/var/log/gdm
/var/log/sa

statコマンドを使用すると、変更された日時を見つけることができます。

stat /var/log/samba | grep 'Modify:'

結果は次のとおりです。

Modify: 2014-01-02 11:21:27.762346214 -0800 

2つのコマンドを組み合わせて、ディレクトリが変更された日時でリストされるようにする方法はありますか?

64
Purres

find-execスイッチを使用し、次のように-cスイッチを使用してstatの出力形式を定義できます。

find /var -maxdepth 2 -type d -exec stat -c "%n %y" {} \;

これにより、出力の同じ行にファイル名とそれに続く変更時刻が表示されます。

53
rc0r

受け入れられた答えは機能しますが、遅いです。ディレクトリごとにstatを実行する必要はありません。findは変更日を提供し、直接印刷することができます。かなり高速な同等のコマンドを次に示します。

 find /var -maxdepth 2 -type d -printf "%p %TY-%Tm-%Td %TH:%TM:%TS %Tz\n"
103
kzar

find /var -maxdepth 2 -type d | xargs ls -oAHd

これは、基本的なlsコマンドを取得して完全なディレクトリパスを表示する方法です。 lsには再帰検索用の-Rパラメーターがありますが、-lまたは-oオプション(少なくともOSXの場合)では、結果にパスは表示されません。例:ls -lR

13
Mark

最後に変更されたファイルを印刷するために使用するもう1つ。 ls -ltrは、修正時間、ユーザーなどの詳細を表示します

find <my_dir> -mtime -1 -type f -print | xargs ls -ltr 
5
user666

findの最近のGNUバージョンには、日付フィールドを含む-printfオプションも含まれています。ファイルの名前と変更時刻を標準の「C」形式で出力する必要がある場合は、-printf "%c %p\n"を使用できます。

特定の形式の日付が必要な場合は、%Cの後にフィールド文字を使用できます。たとえば、4桁の年は%CYになり、Yは4桁の年の文字になります。
複数のフィールドが必要な場合は、%Cを複数回指定する必要があることに注意してください。たとえば、YYYY-MM-DD形式は%CY-%Cm-%Cdのようになります。

詳細については、manページまたは オンラインドキュメント を確認してください。

これが実際の例です:

find . -name favicon.ico -printf "%c %p\n"
4
Mr. Llama

この行を試してください:

find /var -maxdepth 2 -type d|xargs stat|grep -E 'File|Modi'

ここでそれを実行し、出力します:

....
  File: ‘/var/cache/cups’
Modify: 2013-12-24 00:42:59.808906421 +0100
  File: ‘/var/log’
Modify: 2014-01-01 12:41:50.622172106 +0100
  File: ‘/var/log/old’
Modify: 2013-05-31 20:40:23.000000000 +0200
  File: ‘/var/log/journal’
Modify: 2013-12-15 18:56:58.319351603 +0100
  File: ‘/var/log/speech-dispatcher’
Modify: 2013-10-27 01:00:08.000000000 +0200
  File: ‘/var/log/cups’
Modify: 2013-12-22 00:49:52.888346088 +0100
  File: ‘/var/opt’
Modify: 2013-05-31 20:40:23.000000000 +0200
....
1
Kent