POSIX, bir ls
-l
ong listesindeki tarihler hakkında şunları söyler :
<date and time>
Alan dosya son değiştirildiği zaman uygun tarih ve zaman damgası içerecektir. POSIX yerel ayarında, alan aşağıdaki tarih komutunun çıktısına eşdeğer olacaktır:
date "+%b %e %H:%M"
... dosya son altı ay içinde değiştirildiyse veya:
date "+%b %e %Y"
Bunu göz önünde bulundurarak ve bir dosya adında herhangi bir yeni satır varsa, POSIX tarafından belirtilen ls -q
seçenekle düzgün bir şekilde globasyonlarının sağlanması, hiç ls
sonuç olmadan bir sonuç için normal ifade hazırlamak nispeten kolaydır find
:
d=$(date "+%b %e") y=$(date --date=yesterday "+%b %e")
echo "$d" "$y"
###OUTPUT###
Jul 5 Jul 4
grep
bunun için yalnızca bugünün veya dünün tarihlerini temsil eden dizeleri içeren satırları döndürürsünüz. Aşağıdaki komut buna biraz ekler:
ls -alRcq | sed "1H;/^-/!{/./d;N;h};/$d\|$y/!d;x;/\n/p;g"
ls
seçenekler aşağıdakilerden oluşur:
-a
dizindeki tüm dosyaları döndürme - .dot
-l
uzun liste
-R
tüm alt dizinleri özyinelemeli olarak listeleme
-c
erişim zamanı yerine değişiklik zamanını görüntüle
-q
bir dosya adında ?
yazdırılamayan veya \t
ab karakterleri yerine kabuk küresini döndürme
Bu sonuçlar yalnızca eşleşen |pipe
dosyaya aktarılır sed
:
- Bir yol adından önceki boş satır ve aşağıdaki satır
- İle başlayan satırlar
-
(diğer bir deyişle - değil d
dizin için) şu bilgileri de içerirler date
.
- Ad verdikleri dizin gerçekten filtrelediğiniz dosyaları içermediği sürece yol adı satırlarını yazdırmaz.
Çıktı şöyle görünür:
ls -alRcq --color=always |
sed "1H;/^-/!{/./d;N;h};/$d\|$y/!d;x;/\n/p;g"
###OUTPUT###
.:
-rw------- 1 mikeserv mikeserv 2086 Jul 4 10:52 .bash_history
-rw------- 1 mikeserv mikeserv 2657 Jul 4 15:20 .lesshst
-rw-r--r-- 1 mikeserv mikeserv 681 Jul 5 05:18 .zdirs
-rw------- 1 mikeserv mikeserv 750583 Jul 5 08:28 .zsh_history
-rw-r--r-- 1 mikeserv mikeserv 166 Jul 4 23:02 Terminology.log
-rw-r--r-- 1 mikeserv mikeserv 433568 Jul 4 13:34 shot-2014-06-22_17-10-16.jpg
-rw-r--r-- 1 mikeserv mikeserv 445192 Jul 4 13:34 shot-2014-06-22_17-11-06.jpg
./.cache/efreet:
-rw------- 1 mikeserv mikeserv 37325 Jul 4 22:51 desktop_localhost_C.eet
-rw------- 1 mikeserv mikeserv 37325 Jul 4 23:30 desktop_localhost_en_US.eet
-rw------- 1 mikeserv mikeserv 24090 Jul 4 22:51 desktop_util_localhost_C.eet
-rw------- 1 mikeserv mikeserv 24090 Jul 4 23:30 desktop_util_localhost_en_US.eet
-rw------- 1 mikeserv mikeserv 16037 Jul 4 23:30 icon_themes_localhost.eet
-rw------- 1 mikeserv mikeserv 3117 Jul 4 23:30 icons___efreet_fallback_localhost.eet
-rw------- 1 mikeserv mikeserv 768039 Jul 4 23:30 icons_gnome_localhost.eet
-rw------- 1 mikeserv mikeserv 18589 Jul 4 23:30 icons_hicolor_localhost.eet
./.config:
-rw-r--r-- 1 mikeserv mikeserv 30 Jul 4 19:10 pavucontrol.ini
./.config/chrome:
-rw-r--r-- 1 mikeserv mikeserv 94332179 Jul 4 13:36 conf.tar.lz4.bak
Evet, hatta çalışıyor LS_COLORS
- bu cron
elbette sizin için düşük bir önceliktir , ancak hey seçenekleriniz açıktır.
Her durumda, bu, diğer bazı olası çözümlere göre bazı önemli avantajlar sunar.
İlk olarak find
+ ls
birden fazla çağrıyı içerir - bu sadece tek bir ls
süreci içerir ve bu yüzden her şeyi - varsayılan olarak yaptığı - güvenilir bir şekilde sıralayabilir ve böylece sort
yardımcı olur.
Herhangi bir çözüm içeren find
ve sort
ve ls
hemen hemen yapıyor hepsi iki kere işin. ls
ve find
her yol adını ve stat
her dosyayı çözecektir . ls
ve sort
her ikisi de tüm sonuçları sıralayacaktır. Muhtemelen sadece single'ı kullanmak en iyisidir ls
.
Sonra elbette bu cevabın date
ve sed
bölümleri var . Burada dikkat edilmesi gereken önemli nokta, zor kısmı yapmanız ve önce regex'i elde etmenizdir - ve sadece bir kez - ve daha sonra, sonuçları almak, sonuçları almak, sonuçları sıralamak ve sonuçları sıralamak yerine yalnızca tek bir sonuç listesini budamanızdır.
Bu, muhtemelen diğer çözümlerin de olacağı gibi, yeni satırlar içeren dosya adlarını bozmaz. Bu çözümün bir sonraki açıklayacağım kendi uyarıları var, ancak dakikalar ve kolayca ele alınabiliyorlar. Bence buradaki en sağlam çözüm.
Yukarıdaki komutun size sorunlara neden olabileceği iki durum vardır. Birincisi ?
, dosya adlarındaki globları içerir - olduğu gibi burada sunulan diğerlerinden daha sağlam bir çözüm olduğu ve biriyle karşılaşma olasılığının ?
tek başına yeterince küçük olmasına rağmen, bu globları çözme olasılığı vardır. birden fazla dosya adıyla eşleşebilir. Bakınız bu Bu konuda daha fazla bilgi için bkz.
Diğer olasılık yanlış bir pozitif içerir - örneğin, date
aradığımız dizeyle gerçekten eşleşen bir dosya adınız varsa , grep
ancak o günlerin hiçbirinde değiştirilmemişse. Bunun bir sorun olduğuna güvenmiyorum, ama eğer öyleyse, sorun ve muhtemelen bunun üstesinden gelmek için normal ifadeyi daha belirgin hale getirmenize yardımcı olabilirim.
ls -ls **/*(.)