Saya mencoba mencari file yang Dibuat pada bulan Juni, Juli dan Agustus. Saya menggunakan metode ini
ls -lrth|awk '/[Jun][Jul][Aug]/ {print}'
tapi itu tidak berhasil.
Saya mencoba mencari file yang Dibuat pada bulan Juni, Juli dan Agustus. Saya menggunakan metode ini
ls -lrth|awk '/[Jun][Jul][Aug]/ {print}'
tapi itu tidak berhasil.
Jawaban:
Anda dapat mencocokkan pada beberapa pola seperti:
awk '/Jun/ || /July/ || /Aug/' <(ls -lrh)
Ini mengembalikan semua kecocokan untuk Juni, Juli, atau Agustus. Anda tidak memerlukan print
pernyataan karena itu adalah awk
tindakan default.
awk '/Jun|Jul|Aug/'
atauawk '/Ju[nl]|Aug/'
Sebagai aturan umum, itu adalah ide yang sangat buruk untuk mem-parsing output dari ls . Cara yang lebih baik untuk melakukan apa yang Anda inginkan adalah
stat -c "%n %y" * | grep 2013-0[678]
Atau, periksa hanya bidang terakhir untuk melindungi dari kasus yang tidak terduga di mana nama file itu sendiri adalah tanggal:
stat -c "%n %y" *| awk '$NF ~ /2013-0[678]/'
Dari 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]/'
hanya memeriksa output field terakhir, di (mungkin?) Bahkan bahwa file nama sesuai dengan regex bahkan ketika tanggal tidak.
ls
adalah perintah untuk menampilkan informasi tentang file yang dapat dibaca manusia. Jangan menggunakannya dalam skrip .
Perintah untuk menemukan file di pohon direktori yang cocok dengan kriteria tertentu adalah find
. Jika Anda memiliki GNU find (yaitu Linux atau Cygwin yang tidak tertanam) atau FreeBSD find (yaitu FreeBSD atau OSX), Anda dapat menggunakan -newermt
untuk mencocokkan file yang terakhir dimodifikasi setelah tanggal tertentu.
find . -newermt '1 June' ! -newermt '1 September' -print
Tambahkan tahun jika Anda ingin mencocokkan file pada tahun tertentu, bukan tahun kalender saat skrip berjalan.
Jika implementasi find Anda tidak memiliki -newermt
, Anda harus melakukannya -newer
, yang membandingkan tanggal file yang find
ditemukan dengan file tetap. gunakan touch
untuk membuat file sementara dengan tanggal yang ingin Anda gunakan sebagai batas.
dir=$(mktemp -d)
touch -d 201306010000 "$dir/from"
touch -d 201309010000 "$dir/to"
find . -newer "$dir/from" ! -newer "$dir/to" -print
rm -r "$dir"
[...]
konstruk tersebut cocok dengan satu karakter, yang dapat berupa salah satu karakter di antara tanda kurung. Jadi ekspresi Anda cocokJJA
atauJug
(J
dari[Jun]
,u
dari[Jul]
, dang
dari[Aug]
) tetapi bukan singkatan bulan yang Anda harapkan cocok.