Pertanyaan Filter ls output berdasarkan ukuran file


Saya ingin memfilter output dari ls perintah berdasarkan ukuran file. File .jpg atau .png yang lebih besar dari 100KB harus dilaporkan dalam output.

Saya sudah bisa menyaring file .png / .jpg, tetapi saya tidak dapat membuang file yang lebih kecil dari 100KB.

Inilah yang saya gunakan saat ini:

ls -lah | grep '.png\|.jpg'

Ada gagasan bagaimana saya bisa melakukan ini?


4
2018-05-16 18:42


asal




Jawaban:


Seperti yang disarankan orang lain, find akan memungkinkan Anda untuk menemukan file dalam rentang ukuran tertentu. Find hanya menghasilkan path ke setiap file. Juga, tanpa kualifikasi lebih lanjut, find akan menemukan semua file di direktori saat ini dan di setiap direktori di bawah direktori saat ini. Pencarian berikut hanya menggunakan direktori dan penggunaan saat ini ls untuk menyelesaikan hasilnya.

find . -maxdepth 1 -size +200 \( -name \*.png -o -name \*.jpg \) -print | xargs ls -ldh

Perhatikan bahwa ukurannya dalam blok, di mana blok sering jika tidak selalu 512 byte.


2
2018-05-16 19:09



Anda harus menyebutkan bahwa 'ls' harus memiliki bendera '-d' agar ini berfungsi. 'ls-lh' akan menunjukkan output yang tidak difilter. - cschol
@cschol: Alasan untuk itu -d adalah untuk mencegah ls dari daftar isi dari semua direktori dalam output find. - garyjohn


Anda dapat melakukannya menggunakan find:

find . -type f -size +100k | grep '.png\|.jpg'

Dimana +100k menentukan ukuran dalam KB, yang berarti bahwa hanya file yang lebih besar dari ini harus menjadi output. find juga memiliki beberapa opsi bagus lainnya, misalnya hanya mencantumkan file yang dibuat beberapa waktu lalu. Lihat man find untuk lebih jelasnya.

Di atas juga dapat ditulis ulang sebagai

find . -type f -size +100k -name "*.png" -o -name "*.jpg"

4
2018-05-16 18:45





Menggunakan find dari pada ls:

find . -type f -size +100k \( -name \*.png -or -name \*.jpg \)

3
2018-05-16 18:50