Tarihe göre sıralama


17

Orijinal:

23 Ocak 2011 10:42 SOMETHING 2007.12.20.avi
26 Haziran 2009 SOMETHING 2009.06.25.avi
12 Şub 2010 SOMETHING 2010.02.11.avi
29 Ocak 2011 09:17 BİR ŞEY 2011.01.27.avi
11 Şub 2011 20:06 SOMETHING 2011.02.10.avi
27 Şub 2011 23:05 SOMETHING 2011.02.24.avi

Çıktı:

27 Şub 2011 23:05 SOMETHING 2011.02.24.avi
11 Şub 2011 20:06 SOMETHING 2011.02.10.avi
29 Ocak 2011 09:17 BİR ŞEY 2011.01.27.avi
23 Ocak 2011 10:42 SOMETHING 2007.12.20.avi
12 Şub 2010 SOMETHING 2010.02.11.avi
26 Haziran 2009 SOMETHING 2009.06.25.avi

Yukarıdaki listeyi (Orijinal) ile oluşturdum:

ls -A -lR | grep "^-" | sed "s/.\{43\}/&\n/" | grep -v "^-" | while read ONELINE; do if echo $ONELINE | cut -d " " -f3 | grep -o '[0-9][0-9]:[0-9][0-9]' > /dev/null 2>&1; then echo $ONELINE | sed "s/.\{7\}/&$(date +%Y) /"; else echo $ONELINE; fi; done

En yeni dosyanın üstte olduğu çıktıyı nasıl alabilirim?


2
@ user4724: listeyi nasıl oluşturdunuz?

@ user4724: Bu benim için sahip olduğun aynı çıkış türünü oluşturmuyor - Gilles'in cevabı

Yanıtlar:


21

Çoğu birleşimde lsbir -tseçenek vardır. Gönderen manbenim Debian kutusunun sayfa:

-değiştirme süresine göre sırala

Aşağıdaki komutu deneyin:

$ ls -lt


özyinelemeye ihtiyacım var, üzgünüm
LanceBaynes

+ ls -lt dosyada 1 dosya değişirse tam bir dizini listeler.
LanceBaynes

14

Sıralamaya çalıştığınız bir metin dosyası mı yoksa tarihe göre bir dizin listesi görüntülemeye mi çalışıyorsunuz? İkincisi için, -tişaretini kullanınls . İlki için, özellikle -Müç harfli ay adı kısaltmalarına göre sıralanan GNU türüne bakın. Aşağıdaki komut, ikinci sıralama anahtarını ay adı olarak ele alarak 3., 1., 2. ve 4. sütunlara göre sıralar.

sort -k 3 -k 1M -k2 -k4 in.txt

Her zaman Japonca / ISO stili tarihleri, her zaman YYYY-AA-GG-SS-AA-SS (yani en önemlisi ilk, sabit sütun genişliği) sırasını kullanmayı düşünün. Bu şekilde tarihe göre sıralama sözlükbilimsel sıralama ile aynıdır.


Bu tarih biçimi önerisindeki baştaki sıfırları unutmayın. Bu, dizeyi kendim biçimlendirdiğimde kullandığım biçimdir.
çalıntı anne

@stolenmoment Boşluklara aldırmazsanız sıfırlar yerine boşluk kullanabilirsiniz, önemli nokta sabit bir sütundur. 2018  5 26yanı sıra 2018 05 26(ardışık alanları birleştiren işaretleme geçmezseniz ...), iyi çalışmıyor 2018 5 26.
Gilles 'SO- kötü olmayı bırak'

Evet, dosya adlarındaki boşluklardan refleks olarak kaçınıyorum, eminim nedenini tahmin edebilirsiniz.
çalıntı anne

3

lsOrijinal soru sorulduğunda işlevsellik komutta olup olmadığından emin değilim , ancak şimdi seçeneği kullanabilirsiniz --full-time.

Örneğin,

ls -t --full-time 

altta en eski zamanla sıralanır; veya kullanıyorsanız:

ls -tr --full-time

o zaman tersine çevirir.


Soru, dosyanın değişiklik tarihine / saatine göre nasıl sıralanacağıyla ilgilidir. -tSeçenek tamamen bu soruyu cevaplar; --full-timegerçekten alakalı değil.
G-Man

-T seçeneği olan tek şey altı ay içinde değiştirilen dosyalar için yıl vermez; burada --full-time tam olarak bunu verir. İstediğiniz bir tarih biçimini biçimlendirmek için zaman stilini de kullanabilirsiniz. ör. ls -ltr - zaman tarzı +% Y-% m-% d \% H:% M:% S
Bevan Thomas

Ne demek istediğinden emin değilim.  ls -tdosyaların modunu ve sahibini, ana bilgisayar adını ve işletim sistemi sürümünü veya Çin'deki çayın fiyatını vermez.  ls -tdeğişiklik tarihini bile göstermez. Ancak soru, dosya bilgilerini görüntülemek değil, dosyaları değişiklik tarihine göre sıralamakla ilgilidir. Sorunun cevabına katkıda bulunmuyorsunuz; iyi bilinen ek bilgiler ekliyorsunuz. 50 itibar puanı aldığınızda, bu tür bilgileri yorum olarak gönderebilirsiniz .
G-Man,

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.