最近変更されたすべてのファイルを一覧表示する(再帰的)


20

したがって、ls過去7日間に変更されたすべてのファイルを(たとえば)表示したいと思います。私がdocroot-folderにいる場合、「より深く」見えるはずです。

例えば:

File        Last changed
docroot
|- myfile1  30.11.2015
|- myfile2  10.11.2015
|- MySub
   |-sub1   30.11.2015
   |-sub2   10.11.2015

したがって、ls(または適合するもの)が出力されmyfile1、(可能であれば )である必要がありますMySub/sub1

これは1つのコマンドで実行できますか?

回答:


38

もちろん。現在のディレクトリから:

find . -type f -mtime -7 -exec ls -l {} \; 

リダイレクトを追加します(別名> results.txtでファイルに保存します)。

  • type f ディレクトリのみではなくファイルのみを実行します
  • mtime -7 7日前から現在まで(+7は「7日より古い」)
  • そしてそれをフィードしてls長いリストを表示します

あなたもこのls -lパーツで遊ぶことができます:

find . -type f -mtime -7 -exec ls -Rl --time-style=long-iso {} \; 
find . -type f -mtime -7 -exec ls -R  --time-style=long-iso {} \; 

長いリスト(1)または短いリスト(2)のファイル間にディレクトリがあるメソッドのようなツリーを表示します。


4
findlsあなたがちょうどできるようにオプションがありますfind . -type f -mtime -7 -ls
-heemayl

確かに、これはもう少し一般的になります(このメソッドを使用して、-remove-する必要のあるファイルを見つけ、そのコマンドを変更することができます:))
Rinzwind

3
また、複数のパラメーターを使用find ... -exec ls -l {} +するls -l回数を減らして、はるかに効率的に実行する方が適切です。これは、findPOSIX で指定されている標準オプションです。
パブーク

5

zsh

ls -l **/*(.m-7)
  • **/* 現在のディレクトリから再帰的にファイルを探します

  • (.m-7).通常のファイルをm-7示すglob修飾子で、過去7日間に変更されたファイルを示します


2

次のコマンドはMac OSXで夢をかなえます-おそらくUbuntuでも…

find . -type f -mtime -7 -exec stat -lt "%Y-%m-%d %H:%M:%S" {} \; | cut -d\  -f6- | sort -r

これにより、現在のディレクトリツリーで、過去7日間に変更されたファイルが検索され、変更日付+時間とパスが出力され、新しいものが最初にソートされます。

出力例:

2018-02-21 22:06:30 ./fmxmlsnippet.xml
2018-02-19 12:56:01 ./diff.html
2018-02-19 12:44:37 ./temp/iDDR/XMSC_fmxmlsnippet.xml
2018-02-18 22:04:05 ./temp/iDDR/XMFD_fmxmlsnippet.xml
2018-02-15 10:18:27 ./xml/iDDR/XML2_fmxmlsnippet.xml
2018-02-15 10:13:29 ./xsl/fmxmlsnippet/XML2_fmCM_AnalyseLayout.xsl
2018-02-15 10:11:36 ./xsl/.DS_Store
2018-02-15 10:10:51 ./xsl/_inc/inc.XML2_fmCM_ReportReferencesToExternalFiles.xsl
2018-02-15 10:10:09 ./xsl/_inc/.DS_Store
2018-02-15 10:07:35 ./xsl/fmxmlsnippet/XML2_fmCM_AnalyseLayout-NoAnchors.xsl
2018-02-15 10:07:35 ./xsl/_inc/inc.XML2_fmCM_AnalyseLayout.xsl

ubuntuユーザーからのフィードバックに感謝します。


Macでうまく機能した唯一のソリューション。ありがとう!
artnikpro

ようこそ@artnikpro!
MrWatson

1

正確に求められたものではありません...しかし、覚えやすいです...

ls -alRt docroot

または

ls -alRt /path/to/top/level/directory

0

7日間、つまり60秒* 60分* 24時間* 7日= 604800秒

現在の日付を秒単位で調べます(UNIXエポック時間):

$ date +%s
1448876323

7日を秒単位で引きます:

expr $(date +%s) - 604800
1448271548

ここでstat、すべてのファイルのコマンドと統計情報を「名前+秒単位の時間」の形式awkで出力し、計算した日付よりも変更時間が長いファイルを切り取るために使用します

$ stat --printf="%n %Y\n" $HOME/* | awk '$2 > 1448271265 {print $0}'
/home/xieerqi/1448428697574.png 1448429613
/home/xieerqi/1448763343273.png 1448763478
/home/xieerqi/1510DRIVE 1448352453
/home/xieerqi/addRemoveDistribution 1448666843
/home/xieerqi/add-update.awk 1448716356
/home/xieerqi/add-update.sh 1448625092

特に興味深いのは、最後の3つのファイルです。7日前に作業していたことがわかっているからです。したがって、私はそれが機能することを知っています


2
awk '$2 > 1448271265 {print $0}'あなたの代わりに直接言うことができることに注意してくださいawk '$2 > 1448271265'。真の条件では、awkは現在の行をデフォルトのアクションとして出力します。
fedorqui
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.