Mulai seperti @Rajish, tetapi menggunakan printfperintah dari finduntuk menentukan format output. Ada 3 format terkait waktu, atime, ctime dan mtime - %Tuntuk mtime, %Adan %Cuntuk format lainnya.
@adalah untuk menentukan format waktu dalam detik sejak zaman. %fadalah untuk nama file, \nuntuk baris baru antara 2 file.
Kemudian mengurutkan berdasarkan nomor dalam urutan terbalik memberikan file termuda pertama, dan kami mengambil 20 baris¹ dengan head.
Pada akhirnya, seddigunakan, untuk membuang informasi waktu.
¹) karena headbekerja baris demi baris, satu file dengan lebih dari 20 baris baru pada namanya, yang agak tidak biasa, tetapi tidak dilarang, dapat merusak output jika itu termasuk dalam 20 pertandingan pertama. Jika Anda memiliki file seperti itu, silakan coba singkirkan mereka - yah, untuk mengubah namanya. Mereka akan sering menjadi masalah untuk skrip sederhana.
Jika Anda menggunakan file's -lsperintah, karakter khusus akan dicetak sebagai karakter-escape: find . -maxdepth 1 -size +20M -printf "%T@ " -ls | sort -nr | head -n 20 | sed 's/[^ ]\+ //'. Selain itu formatnya akan seperti ls -l, EoghanM juga ditentukan -l.
manatwork
printfhanya berfungsi untuk distribusi GNU tertentu.
Brethlosze
%T+menghasilkan cap waktu yang dapat dibaca manusia seperti 2018-11-06+13:37:54.4606466460yang juga dapat disortir berdasarkan sort(tanpa -n), lihat: unix.stackexchange.com/questions/29899/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
5
Zsh ini kualifikasi gumpal membuat ini mudah. The .kualifikasi menyeleksi hanya file biasa, Lm+20file menyeleksi yang setidaknya 20MB ditambah satu byte panjang; untuk memasukkan file dengan panjang 20MB, gunakan L+20971519. Kemudian ommengurutkan dengan mengurangi waktu modifikasi, dan [1,10]membatasi ekspansi ke 10 pertandingan pertama. Anda masih memerlukan -topsi untuk lsjika Anda ingin membuat daftar file berdasarkan tanggal; atau Anda dapat mengirimkan file ke perintah lain (yang termuda dulu). Untuk meneruskan file ke perintah lain dengan file terlama terlebih dahulu, gunakan Omuntuk mengurutkan dengan meningkatkan waktu modifikasi dan [-10,-1]untuk mengekstrak 10 pertandingan terakhir.
ls -ltr -- *(.Lm+20om[1,10])
echo *(.Lm+20Om[-10,-1])
Terima kasih atas semua jawabannya. Tujuan saya adalah sebagai berikut:
ls -halt | grep "M " |head
Meskipun ia melupakan 20 Megabita yang mendukung apa pun lebih dari satu megabita (dan di bawah satu gigabita), mudah diingat dan mempertahankan elemen yang dapat dibaca manusia dari ukuran file.
Anda seharusnya tidak mencoba untuk mengurai output ls, itu menunjukkan kepada Anda representasi file, tidak lebih. Untuk nama file yang sederhana, sebagian besar output akan setara dengan nama file, tetapi Anda tidak harus bergantung padanya.
Chris Down
Itu benar saya yakin, tetapi dalam hal pengguna manusia (dan output tidak disalurkan ke tempat lain), yang ini lebih mudah diingat karena dapat disatukan lebih mudah dari alat sederhana yang diketahui tldp.org/LDP/GNU-Linux- Tools-Summary / html / c1089.htm
file
's-ls
perintah, karakter khusus akan dicetak sebagai karakter-escape:find . -maxdepth 1 -size +20M -printf "%T@ " -ls | sort -nr | head -n 20 | sed 's/[^ ]\+ //'
. Selain itu formatnya akan sepertils -l
, EoghanM juga ditentukan-l
.printf
hanya berfungsi untuk distribusi GNU tertentu.%T+
menghasilkan cap waktu yang dapat dibaca manusia seperti2018-11-06+13:37:54.4606466460
yang juga dapat disortir berdasarkansort
(tanpa-n
), lihat: unix.stackexchange.com/questions/29899/…Zsh ini kualifikasi gumpal membuat ini mudah. The
.
kualifikasi menyeleksi hanya file biasa,Lm+20
file menyeleksi yang setidaknya 20MB ditambah satu byte panjang; untuk memasukkan file dengan panjang 20MB, gunakanL+20971519
. Kemudianom
mengurutkan dengan mengurangi waktu modifikasi, dan[1,10]
membatasi ekspansi ke 10 pertandingan pertama. Anda masih memerlukan-t
opsi untukls
jika Anda ingin membuat daftar file berdasarkan tanggal; atau Anda dapat mengirimkan file ke perintah lain (yang termuda dulu). Untuk meneruskan file ke perintah lain dengan file terlama terlebih dahulu, gunakanOm
untuk mengurutkan dengan meningkatkan waktu modifikasi dan[-10,-1]
untuk mengekstrak 10 pertandingan terakhir.sumber
Saya pikir ini mungkin cara yang lebih baik untuk menyelesaikan masalah ...
Untuk menghilangkan kesalahan saat menemukan mencoba mengakses file yang Anda tidak memiliki izin untuk membaca Anda mungkin ingin menambahkan
sumber
Ini hanya akan mencetak 10 file yang ditentukan, terlepas dari karakter baris baru yang disematkan dalam nama file. Ini menggunakan sistem file
inodes
sumber
Terima kasih atas semua jawabannya. Tujuan saya adalah sebagai berikut:
Meskipun ia melupakan 20 Megabita yang mendukung apa pun lebih dari satu megabita (dan di bawah satu gigabita), mudah diingat dan mempertahankan elemen yang dapat dibaca manusia dari ukuran file.
sumber
ls
, itu menunjukkan kepada Anda representasi file, tidak lebih. Untuk nama file yang sederhana, sebagian besar output akan setara dengan nama file, tetapi Anda tidak harus bergantung padanya.