Sadece ls ile bir tarihten sonra oluşturulan dosyalar nasıl elde edilir?


97

Komutla, lsyalnızca belirli bir tarihten sonra oluşturulan dosyaları göstermek mümkün mü ...?

Soruyorum çünkü binlerce dosya içeren bir dizim var.

Dünden beri oluşturulan tüm dosyaları görmek istiyorum.

Kullanıyorum ls -ltrancak tüm dosyaları görmek için beklemeliyim ...

DIRECTORY/SINCE=dateOpenVMS den bir eşdeğeri var mı?


1
lsDosyaları listeler, ancak hangi dosyaların listeleneceğini veya çıktı formatını seçmek pek bir şey ifade etmez. Küreselleştirmeyi (kabuk joker karakterleri) veya finddosyaları ada veya meta verilere göre (örneğin tarih) seçmek istediğinizde kullanın.
Gilles

3
Ee, tarih nasıl geçti? Siz ikiniz vurdunuz mu?
Garrett Albright,

3
İle zsh:ls -1 -- *(.m-1)
don_crissti

Yanıtlar:


123

findBelirli bir günden sonra değiştirilen tüm dosyaları bulmak için komutu kullanabilirsiniz .

Örneğin, geçerli dizinde dünden (24 saat önce) beri değiştirilmiş olan tüm dosyaları bulmak için şunu kullanın:

find . -maxdepth 1 -mtime -1

Bu modifiye dosyaları bulmak için Not önce kullanmak zorunda 24 saat önce -mtime +1yerine -mtime -1.


3
Söyleyeceğim şey. Kendini lsburaya sınırlamak için hiçbir sebep yok, Luc.
Warren Young

14
GNU buldukça başka olasılıklar da var. -mmin 5Son 5 dakika içerisinde değiştirilen dosyaları listeler. -newermt "2011-02-27 13:42"Belirtilen tarihten bu yana değiştirilen dosyaları listeler. Normal renkli ekranı elde etmek -exec ls --color -ld {} +yerine kullanabilirsiniz -ls(eğer renkli ls çıktısı istiyorsanız).
Gilles

3
Eksi işaretini not edin:find . -mmin -5
user7543

ve-maxdepth 1, alt dizin seviyesindeki dosyaları aramak için herhangi bir n değerine yükseltilebilir
anshuman

3
benim için bu böyle çalışır: bulmak. tipi f -newermt '2012/01/15 18:09:00'
woohoo

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

Bu, belirli bir tarihten sonra değiştirilen tüm dosyaları bulur.


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

5
Selam Trant! Çözümünüz, sorunun ls kullanma isteğine saygı gösterme konusunda yaratıcı olsa da, ls'nin çıktısını ayrıştırmak nadiren güvenlidir (örneğin, burada yeni satırlar da dahil olmak üzere dosya adlarıyla ne olur?) Ve cevapların sadece bir tanesinin olmamasını istiyoruz. gömlekleri, daha doğrusu nasıl çalıştıklarını açıklamakla alakalı.
dhag,

1
Sorunlar: (1) Sistemimde datediyor Jun 03ama lsdiyor Jun  3ki bu işe yaramaz. (2) Bir hafta önce, tarih 27  ls -l | grep "May 27"Mayıs'tı. O gün değiştirilmiş dosyaları, aynı zamanda başka bir yılın 27 Mayıs'ını değiştiren dosyaları ve adlarında “27 Mayıs” ile dosyaları bulabilirdi. (Eğer düşünüyorsanız Ve bu bakmak, tamamen sahte endişe “10 Aralık” sen başardı eğer.) (3) Ve datesöylemek Jun 2bulacağını için grepping, Jun 20içinden Jun 29değil Jun  2(iki boşluklu). … (Devamı)
G-Man

1
(Devamı)… (4) OP, ls -ltrgirişin sonunda en son değiştirilen dosyaları almak için kullanıyordu . Bir randevu bekliyorsanız, bunu yapmanız gerekmez (listenin sonunda 27 Mayıs 2015, 27 Mayıs 2014, 27 Mayıs 2013, vb. Dosyaların ardından). (5) awk print $2, $3cinsinden eşittir print $2" "$3ve okunması çok daha kolaydır - özellikle üç farklı alıntı düzeyi olduğunda.
G-Man,

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

0

Umarım bu işe yarar:

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

İşte:

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

yukarıdaki komut, 1 Mayıs - 31 Mayıs tarihleri ​​arasında veya daha sonra oluşturulan tüm dosya adlarını yazdırır.

Konsolda da tarih basmak istiyorsanız bunu deneyin

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

Dizinin yolunu belirtmek istiyorsanız, bunu deneyebilirsiniz.

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

Birçok nedenden dolayı, lsçıktıyı ayrıştırmak iyi bir fikir değildir . Ve herkes İngilizce konuşmuyor :-)
Luc M
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.