Dosyaları özyinelemeli olarak nasıl listeleyebilir ve değişiklik zamanına göre sıralayabilirim?


14

Bir dizinin altındaki tüm dosyaları özyinelemeli olarak nasıl listeleyebilir ve çıktıyı değiştirme süresine göre nasıl sıralayabilirim?

Normalde kullanıyorum ls -lhtcama tüm dosyaları özyinelemeli bulamıyor. Linux ve Mac kullanıyorum.

ls -l Mac OS X'te

-rw-r--r--    1 fsr  user      1928 Mar  1  2011 foo.c
-rwx------    1 fsr  user      3509 Feb 25 14:34 bar.c

tarih bölümünün tutarlı veya hizalı olmadığı durumlarda, bir çözümün bunu hesaba katması gerekir.

Kısmi çözüm

stat -f "%m%t%Sm %N" ./* | sort -rn | head -3 | cut -f2-

çalışır, ancak özyinelemeli değil.


Linux'ta olduğunuzu varsayacağım, ancak işletim sisteminizi soruda veya tercihen etiket olarak açıkça belirtmelisiniz.
EBGreen

Yanıtlar:


3

İşte stat@ johnshen64 kullanarak bir yöntem önerdi

find . -type f -exec stat -f "%m%t%Sm %N" '{}' \; | sort -rn | head -20 | cut -f2-

find "$PWD" -type f -exec stat -f $'%m\t%N' '{}' \; | sort -rn | cut -f2-OS X'teki dosyaların mutlak yollarını
basar

hangi sürümünü statkullanıyorsun yukarıdaki biçiminiz benim için çalışmadı. Ben aşağıdaki kullanmak zorunda kaldı: find . -type f -exec stat --printf "%Y\t%y %N\n" '{}' \; | sort -rn | cut -f2-. Bu ilestat (GNU coreutils) 8.23
user84207

12

find'Leri kullanın -printfve makul bir tarih biçiminde sıralayın:

find -type f -printf '%T+\t%p\n' | sort -n

Bu işlem çatallarını en aza indirmeli ve böylece en hızlısı olmalıdır.

Kesirli ikinci bölümü beğenmezseniz (genellikle dosya sistemine zaten uygulanmaz):

find -type f -printf '%T+\t%p\n' | sed 's/\.[[:digit:]]\{10\}//' | sort -n
find -type f -printf '%T+\t%p\n' | cut --complement -c 20-30 | sort -n

DÜZENLEME:find Mac'te standart yoktur -printf. Ancak GNU find'ı Mac'e yüklemek zor değildir (ayrıca Mac / Linux uyumluluğu ve daha fazla uyarı için bu bağlantıya bakın xargs).


0

find .tüm dosyaları alabilmelidir. Bunun gibi bir şey:

find . -exec ls -dl '{}' \; | sort -k 6,7

İhtiyaçlarınız için ayarlamanız gerekir.


Ayrıca EBGreen dedi gibi linux, ls windows PS bir takma ad olduğunu varsayalım, bu yüzden sıralama nesnesi kullanmak ve bu durumda çocuk öğeleri özyinelemeli almak gerekir ama fikir aynıdır.
johnshen64

Mac'te tarihler bazen yıl bölümünü kaçırdığında gerçekten doğru çalışıyor mu?
qazwsx

haklısın, son dosyaların tarih ekranı işleri karıştırır. bu durumda tam olarak biçimlendirilmiş tarihi almak için stat kullanmanız gerekir. dosyalarımın hepsi çok eski, bu yüzden komut iyi çalıştı, bu yüzden ayar maddesi ekledim :-)
johnshen64

@ johnshen64: lsLinux'ta --time-formathem son hem de eski dosya tarihlerinin aynı biçimde gösterilmesini sağlamak için kullanabileceğiniz bir seçenek vardır .
RedGrittyBrick

ah teşekkürler, haklısın, sadece kullanmadın. stat kullanmaktan çok daha basit. sanırım - zaman tarzı denir.
johnshen64

0

Unix Stack Exchange sitesinde benzer bir soruya bu cevap zsh kullandığım için bana yardımcı oldu:

Değişiklik tarihine göre sıralı olarak dosyalar nasıl listelenir (stat komutu mevcut değildir!)


Bu gerçekten bir yorumdur ve orijinal sorunun cevabı değildir . Her zaman kendi yayınlarınıza yorum yapabilirsiniz ve yeterli itibara sahip olduğunuzda , herhangi bir yayın hakkında yorum yapabilirsiniz . Lütfen okuyun Yorum yapmak için neden 50 şöhrete ihtiyacım var? Bunun yerine ne yapabilirim?
DavidPostill
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.