Alt dizinler dahil olmak üzere dosyaları güncelleme tarihine göre sıralamak istiyorum


17

Yalnızca alt dizinler dahil olmak üzere dosyaları güncelleme tarihlerine göre sıralamak istiyorum.

Ben öğrendim ls -lrtR | grep ^-. ancak güncelleme tarihlerine göre sıralanmıyor gibi görünüyor.

Ve bu listeyi bir dosyaya kaydetmem gerekiyor. Mümkün mü?

Apr 01 2010  InsideDoosanServiceImpl.class  // in A directory
Apr 08 2010  MainController.class  // in B directory
Apr 07 2010  RecommendController.class  // in B directory
Apr 01 2010  MainDao.class  // in B directory

Yani listenin tamamı tarihe göre değil, önce klasöre göre sıralanır ve tarihe göre sıralanır.

Tüm alt dizinleri içeren ilk listenin tarihe göre sıralanmasını istiyorum.

Yanıtlar:


12

Tam olarak ne demek istediğinden emin değilim update dates, ama -rinsana göre bunu yapan seçeneği kullanıyorsun -

-r Ters sözlükbilimsel düzeni veya önce en eski girişleri (veya boyuta göre sıralama ile birleştirilirse en son büyük dosyaları almak için)

Zamana göre sıralanmış dosyalara ihtiyacınız varsa, bunun sizin için yeterince iyi olacağını düşünüyorum.

ls -lRt

Listelenen diğer tüm şeylere ihtiyacınız yoksa lskullanabilirsiniz -

ls -1Rt

Bir dosyadaki sonucu yakalamak için yönlendirme işlecini kullanabilir >ve bir dosya adı verebilirsiniz. Böylece böyle bir şey yapabilirsiniz -

ls -lRt > sortedfile.list

Güncelleme:

find . -type f -exec ls -lt {} +

Yani bir dosya en son değiştirildiği zaman :)

Sonucu klasöre ve tarihe göre sıralar. Tarihe ve klasöre göre sıralamak istiyorum .. mümkün mü?

Üzgünüm, lütfen bana biraz çıktı gösterebilir misin? Eğer kullandıysanız klasör sıralamasını tam olarak takip etmedim ls -lrt.
Mayıs 12:11

// Jaypal Singh, çıktımı sorularımda güncelledim ↑ :). Umarım anlarsınız ve kötü İngilizcem için özür dilerim.

1
Dosya listesi, xargsbirden çok çağrı yapmaya zorlamak için yeterince uzunsa, bu başarısız olur ls, çünkü dosyalar yalnızca her lsçağrıda düzgün bir şekilde sıralanır, ancak çıktıda tutarlı bir genel düzen bulunmaz.
Brandon Rhodes

19

Ls ile, -R dizinleri geri alır ve -t modifikasyona göre sıralar. Ancak, dizinleri özyinelemeli olarak gezer ve her dizine -t uygular. Tüm dizinlerdeki tüm dosyaları biriktirmez ve sonra sıralar. (Anladığım kadarıyla, ikincisi istediğiniz şeydir)

Gnu find (1) ile, çağdan bu yana geçen saniye sayısını ve dosya adını içerecek şekilde çıktı biçimini belirtebilirsiniz, ardından bunu sıralamak için (1) boru oluşturabilirsiniz.

find . -type f -printf "%T@ %f\n" | sort -n > out.txt

Yea GNU findyardım eder. Ama OP AIXmakineler üzerinde çalışıyor, bu yüzden GNU findona ulaşılamıyordu.
jaypal singh

lsSıralamadan önce dosyaları biriktirmek çok kötü olamaz. lsile karşılaştırıldığında çok hızlıfind .
Nathan ReinstateMonica Arthur

lsve findaynı verileri okur, bu yüzden ls bulmaktan çok daha hızlı olması gerektiğini düşünemiyorum. Sistemimde bulmak 5 kat daha hızlı (yaklaşık yarım milyon dosyadan arama)
Rolf Rander

7
Yalnızca dosya adını değil, çıktıdaki yolu da tam bir tarih / saat isteyebilirsiniz, bu durumda biçimlendirme dizesini değiştirin: find . -type f -printf "%T@ %Tc %p\n" | sort -n > out.txtgibi çıktı girişleri 1427913836.2330520210 wed 1 apr 2015 20:43:56 ./subdir/file.txt.
Carl

Harika. Bu gerçekten bana yardımcı oldu. Çağlar boyunca alt dizinlere sıralamanın bir yolunu arıyordum!
bhu Boue vidya
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.