lsで日付の後に作成されたファイルのみを取得するにはどうすればよいですか?


97

lsコマンドを使用すると、特定の日付、時間後に作成されたファイルのみを表示できますか?

私は何千ものファイルがあるディレクトリを持っているのでそれを求めています。

昨日以降に作成されたすべてのファイルを参照してください。

使用してls -ltrいますが、すべてのファイルが表示されるまで待つ必要があります...

DIRECTORY/SINCE=dateOpenVMSに相当するものがありますか?


1
lsファイルを一覧表示しますが、一覧表示するファイルや出力形式を選択することはあまりできません。グロビング(シェルワイルドカード)を使用するかfind、名前またはメタデータ(日付など)でファイルを選択する場合。
ジル

3
それで、lsの日付はどうでしたか?二人はそれを思いつきましたか?
ギャレットオルブライト

3
with zshls -1 -- *(.m-1)
don_crissti

回答:


123

このfindコマンドを使用して、特定の日数後に変更されたすべてのファイルを検索できます。

たとえば、昨日(24時間前)以降に変更された現在のディレクトリ内のすべてのファイルを検索するには、次のコマンドを使用します。

find . -maxdepth 1 -mtime -1

それが変更されたファイルを見つけるために注意する前に、あなたが使用する必要があり、24時間前-mtime +1の代わりに-mtime -1


3
私が言っていたまさにそのこと。lsここに限定する理由はありません、リュック。
ウォーレンヤング

14
GNU findでは、他の可能性もあります。-mmin 5過去5分間に変更されたファイルをリストします。-newermt "2011-02-27 13:42"指定した日付以降に変更されたファイルをリストします。-exec ls --color -ld {} +代わりに-lsを使用して、通常のカラー表示を取得できます(カラーls出力が好きな場合)。
ジル

3
マイナス記号に注意してくださいfind . -mmin -5
。– user7543

そして、-maxdepth 1は、あまりにも、サブディレクトリレベル下のファイルを検索するために、任意のn値まで増加させることができる
アンシュマン

3
私にとっては、これは次のように機能します:find。-type f -newermt '1/15/2012 18:09:00'
woohoo

15
find . -type f -newermt '1/30/2017 0:00:00'

これにより、特定の日付以降に変更されたすべてのファイルが検索されます。


1
ls -ltr | grep "`date | awk '{print $2" "$3}'`"

5
こんにちはTrant!lsを使用するという質問の要求を尊重しようとするソリューションは創造的ですが、lsの出力を解析することはほとんど安全ではありません(たとえば、改行を含むファイル名はどうなりますか?)。ライナーではなく、関連する限り詳細にそれらがどのように機能するかを説明します。
dhag

1
問題:(1)私のシステムでdateJun 03lsと言いますが、と言うJun  3ので、これは動作しません。(2)1週間前、日付は5月27日でし  ls -l | grep "May 27"た。その日に変更されたファイル、他の年の5月27日に変更されたファイル、および名前に「5月27日」が含まれるファイルが見つかります。(あなたはそれが完全に偽の懸念だと思うなら、見上げる「12月10日を」。)(3)そして、あなたが得ることができたならば、date言うことJun 2、そのためにgrepをすると見つけることJun 20によってJun 29ではなく、Jun  2(2つのスペースで)。…(続き)
Gマン

1
(続き)…(4)OPはls -ltr、リストの最後で最後に変更されたファイルを取得するために使用していました。日付を把握している場合、それを行う必要はありません(リストの最後、2014年5月27日、2013年5月27日などのファイルの後に2015年5月27日のファイルを取得する場合を除く)。(5)awkでは、print $2, $3と同等でありprint $2" "$3、特に3つのレベルの引用符がある場合に、はるかに読みやすくなります。
Gマン

ls -ltr | grep "$(date | awk '{print $2,$3}')"
SergioAraujo

0

これがうまくいくことを願っています:

ls -ltr | awk '$6 == "May" && $7 >=01 && $7 <= 31 {print $9}'

ここに:

$6 indicates position of month
$7 indicates day of the month

上記のコマンドは、5月1日から5月31日までに作成されたすべてのファイル名を出力します

コンソールに日付も印刷したい場合はこれを試してください

ls -ltr | awk '$6 == "May" && $7 >=01 && $7 <= 31 {print $6"-"$7,$9}'

ディレクトリのパスを指定する場合は、これを試してください。

ls -ltr <path>| awk '$6 == "May" && $7 >=01 && $7 <= 31 {print $6"-"$7,$9}'

多くの理由から、ls出力を解析することは得策ではありません。そして誰もが英語を話すわけではありません:
リュックM
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.