Bagaimana cara mendapatkan hanya file yang dibuat setelah kencan dengan ls?

97

Dengan lsperintah, mungkinkah hanya menampilkan file yang dibuat setelah tanggal tertentu, jam ...?

Saya menanyakannya karena saya memiliki direktori dengan ribuan file.

Saya ingin begitu melihat semua file yang dibuat sejak kemarin.

Saya menggunakan ls -ltrtetapi saya harus menunggu untuk melihat semua file ...

Ada yang setara dengan DIRECTORY/SINCE=datedari OpenVMS?

Luc M
sumber
1
lsdaftar file, tetapi tidak menawarkan banyak untuk memilih file apa yang akan dicantumkan atau format output. Gunakan globbing (shell wildcard) atau findketika Anda ingin memilih file berdasarkan nama atau metadata (misalnya tanggal).
Gilles
3
Jadi, bagaimana kencan dengan ls pergi? Apakah kalian berdua rukun?
Garrett Albright
3
Dengan zsh:ls -1 -- *(.m-1)
don_crissti

Jawaban:

123

Anda dapat menggunakan findperintah untuk menemukan semua file yang telah dimodifikasi setelah beberapa hari.

Misalnya, untuk menemukan semua file di direktori saat ini yang telah dimodifikasi sejak kemarin (24 jam yang lalu) gunakan:

find . -maxdepth 1 -mtime -1

Perhatikan bahwa untuk menemukan file diubah sebelum 24 jam yang lalu, Anda harus menggunakan -mtime +1bukan -mtime -1.

dogbane
sumber
3
Hal yang akan saya katakan. Tidak ada alasan untuk membatasi diri Anda di lssini, Luc.
Warren Young
15
Dengan GNU find, ada kemungkinan lain. -mmin 5daftar file yang diubah dalam 5 menit terakhir. -newermt "2011-02-27 13:42"daftar file yang dimodifikasi sejak tanggal yang ditentukan. Anda dapat menggunakan -exec ls --color -ld {} +alih-alih -lsuntuk mendapatkan tampilan warna biasa (jika Anda suka ls berwarna).
Gilles
4
Perhatikan tanda minus:find . -mmin -5
user7543
dan -maxdepth 1 dapat ditingkatkan ke nilai n untuk mencari file di bawah level subdirektori juga
anshuman
3
bagi saya ini bekerja seperti ini: temukan. -type f -newermt '1/15/2012 18:09:00'
woohoo
15
find . -type f -newermt '1/30/2017 0:00:00'

Ini akan menemukan semua file diubah setelah tanggal tertentu.

nullability
sumber
1
ls -ltr | grep "`date | awk '{print $2" "$3}'`"
Trant Batey
sumber
5
Hai Trant! Sementara solusi Anda kreatif dalam mencoba untuk menghormati permintaan pertanyaan untuk menggunakan ls, parsing output ls jarang aman (misalnya, apa yang terjadi dengan nama file termasuk baris baru di sini?), Dan kami menyukainya untuk jawaban bukan hanya satu- liners, tetapi lebih untuk menjelaskan bagaimana mereka bekerja sedetail yang relevan.
Dhag
1
Masalah: (1) Pada sistem saya, datekatakan Jun 03, tetapi lskatakan Jun  3, jadi ini tidak berhasil. (2) Seminggu yang lalu, tanggalnya adalah 27 Mei.  ls -l | grep "May 27"Akan menemukan file yang dimodifikasi hari itu, tetapi juga file yang dimodifikasi 27 Mei tahun lainnya - dan file dengan "27 Mei" di namanya. (Dan jika Anda berpikir itu adalah masalah yang benar-benar palsu, lihatlah “10 Des” .) (3) Dan, jika Anda berhasil datemengatakannya Jun 2, memahami hal itu akan menemukan Jun 20jawabannya Jun 29, tetapi tidak Jun  2(dengan dua spasi). … (Lanjutan)
G-Man
1
(Lanjutan) ... (4) OP menggunakan ls -ltruntuk mendapatkan file yang paling baru diubah pada akhir daftar. Jika Anda ingin berkencan, tidak perlu melakukan itu (kecuali untuk mendapatkan file 27 Mei 2015 di akhir daftar, setelah file 27 Mei 2014, 27 Mei 2013, dll.). (5) Dalam awk, print $2, $3setara dengan print $2" "$3, dan jauh lebih mudah dibaca - terutama ketika ada tiga tingkat kutipan lainnya.
G-Man
ls -ltr | grep "$(date | awk '{print $2,$3}')"
SergioAraujo
0

Semoga ini berhasil:

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

Sini:

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

perintah di atas ini mencetak semua nama file yang dibuat pada atau setelah 1 Mei hingga 31 Mei

jika Anda ingin mencetak tanggal juga di konsol coba ini

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

Jika Anda ingin menentukan jalur direktori, Anda dapat mencobanya

ls -ltr <path>| awk '$6 == "May" && $7 >=01 && $7 <= 31 {print $6"-"$7,$9}'
Rohit Nimmala
sumber
Untuk banyak alasan, ini bukan ide yang baik untuk mengurai lsoutput. Dan tidak semua orang berbicara bahasa Inggris :-)
Luc M