Im Haziran, Temmuz ve Ağustos aylarında oluşturulan dosyaları aramaya çalışıyorum. Bu yöntemi kullandım
ls -lrth|awk '/[Jun][Jul][Aug]/ {print}'
ama çalışmıyor.
Im Haziran, Temmuz ve Ağustos aylarında oluşturulan dosyaları aramaya çalışıyorum. Bu yöntemi kullandım
ls -lrth|awk '/[Jun][Jul][Aug]/ {print}'
ama çalışmıyor.
Yanıtlar:
Şunun gibi birden çok desenle eşleşebilirsiniz:
awk '/Jun/ || /July/ || /Aug/' <(ls -lrh)
Bu, Haziran, Temmuz veya Ağustos ayları için tüm eşleşmeleri döndürür . Bunun varsayılan işlem print
olduğu için ifadeye ihtiyacınız yoktur awk
.
awk '/Jun|Jul|Aug/'
ya da şöyle yazabildiğiniz kadar basit bir desen içinawk '/Ju[nl]|Aug/'
Genel bir kural olarak, ls çıktısını ayrıştırmak çok kötü bir fikirdir . İstediğinizi yapmanın daha iyi bir yolu
stat -c "%n %y" * | grep 2013-0[678]
Alternatif olarak, dosya adının kendisinin bir tarih olduğu olası durumdan korunmak için yalnızca son alanı kontrol edin:
stat -c "%n %y" *| awk '$NF ~ /2013-0[678]/'
Gönderen man stat
:
-c --format=FORMAT
use the specified FORMAT instead of the default; output a new‐
line after each use of FORMAT
%y time of last modification, human-readable
%n file name
| awk '$NF ~ /2013-0[678]/'
bir tarih olarak olmasa bile bir dosyanın adının normal ifadeyle eşleştiğini (olası değil?) Yalnızca son çıktı alanını kontrol etmek için ... olarak değiştirin .
ls
okunabilir bir dosyadaki dosyalar hakkında bilgi görüntüleme komutudur. Komut dosyalarında kullanmayın .
Bir dizin ağacında belirli ölçütlerle eşleşen dosyaları bulma komutu find
. GNU bulmanız (yani gömülü olmayan Linux veya Cygwin) veya FreeBSD bulmanız (yani FreeBSD veya OSX) varsa, -newermt
belirli bir tarihten sonra en son değiştirilen dosyaları eşleştirmek için kullanabilirsiniz .
find . -newermt '1 June' ! -newermt '1 September' -print
Komut dosyasının çalıştığı takvim yılı yerine belirli bir yıldaki dosyaları eşleştirmek istiyorsanız bir yıl ekleyin.
Bulma uygulamanız yoksa -newermt
, sabit bir dosyayla bulunan -newer
dosyanın tarihini karşılaştıran işlem yapmanız gerekir find
. kullanmak touch
bir sınırı olarak kullanmak istediğiniz tarihle geçici dosyaları oluşturmak için.
dir=$(mktemp -d)
touch -d 201306010000 "$dir/from"
touch -d 201309010000 "$dir/to"
find . -newer "$dir/from" ! -newer "$dir/to" -print
rm -r "$dir"
[...]
yapı, köşeli ayraçlar arasındaki karakterlerden herhangi biri olabilen tek bir karakterle eşleşir. Dolayısıyla ifadeniz eşleşmeyi umuyorJJA
veyaJug
(J
kimden[Jun]
,u
kimden[Jul]
veg
kimden[Aug]
), ancak eşleştirmeyi umduğunuz ay kısaltmalarıyla eşleşmiyor.