Jika saya mengeluarkan perintah find sebagai berikut:
$ find . -name *.ear
Ini mencetak:
./dir1/dir2/earFile1.ear
./dir1/dir2/earFile2.ear
./dir1/dir3/earFile1.ear
Yang ingin saya 'cetak' ke baris perintah adalah nama dan ukurannya:
./dir1/dir2/earFile1.ear 5000 KB
./dir1/dir2/earFile2.ear 5400 KB
./dir1/dir3/earFile1.ear 5400 KB
unix
command-line
find
solaris
Brian Hart
sumber
sumber
find . -name '*.ear' -exec ls -lh {} + \;
(ekstensi GNU) ataufind . -name '*.ear' -print0 | xargs -0 ls -lh
. Anda juga mungkin ingin menambahkan-type f
jika Anda hanya tertarik pada file (atau menambahkan-d
ke ls jika Anda ingin direktori itu sendiri disertakan tanpa isinya).-type f
hanya menghitung file biasa.find . -name "*.ear" -type f
untuk file.-type d
bekerja untuk direktori.Anda perlu menggunakan -exec atau -printf. Printf bekerja seperti ini:
-exec lebih kuat dan memungkinkan Anda menjalankan perintah sewenang-wenang - sehingga Anda dapat menggunakan versi 'ls' atau 'wc' untuk mencetak nama file bersama dengan informasi lainnya. 'man find' akan menunjukkan argumen yang tersedia untuk printf, yang dapat melakukan lebih dari sekadar ukuran file.
[edit] -printf tidak ada dalam standar POSIX resmi, jadi periksa apakah itu didukung pada versi Anda. Namun, kebanyakan sistem modern akan menggunakan GNU find atau versi serupa yang diperluas, jadi ada kemungkinan besar ini akan diterapkan.
sumber
column
perintah.find . -name *.ear -printf "%p %k KB\n" | column -t
-printf
pilihan tidak bekerja di OS X baik. Lihat stackoverflow.com/questions/752818/… .solusi sederhana adalah dengan menggunakan opsi -ls di find:
Itu memberi Anda setiap entri dalam format "ls -l" normal. Atau, untuk mendapatkan hasil spesifik yang sepertinya Anda cari, ini:
Yang akan memberi Anda nama file diikuti dengan ukuran dalam KB.
sumber
ls
opsi, ini seharusnya jauh lebih tinggi dalam daftar jawaban daripada yang sebenarnya.Menggunakan gnu find, saya rasa inilah yang Anda inginkan. Ia menemukan semua file nyata dan bukan direktori (-tipe f), dan untuk masing-masing mencetak nama file (% p), tab (\ t), ukuran dalam kilobyte (% k), sufiks "KB", dan kemudian baris baru (\ n).
Jika perintah printf tidak memformat hal-hal yang Anda inginkan, Anda dapat menggunakan exec, diikuti dengan perintah yang ingin Anda jalankan pada setiap file. Gunakan {} untuk nama file, dan akhiri perintah dengan titik koma (;). Pada kebanyakan shell, ketiga karakter tersebut harus di-escape dengan garis miring terbalik.
Berikut solusi sederhana yang menemukan dan mencetaknya menggunakan "ls -lh", yang akan menunjukkan ukuran dalam bentuk yang dapat dibaca manusia (k untuk kilobyte, M untuk megabyte):
Sebagai alternatif lain, "wc -c" akan mencetak jumlah karakter (byte) dalam file:
sumber
-name '*.ear'
contoh dihilangkan , ini seharusnya menjadi jawaban # 1. Ini menjawab pertanyaan dengan tepat, menjelaskan arti sintaksis, dan memberikan banyak alternatif.find . -type f -printf '%k KB\t %p\n'
misalnya, mencetak ukuran file terlebih dahulu, kemungkinan besar akan menjadi keluaran yang lebih bagus dalam hal pemformatan karena penyelarasan.Ini memberi Anda ukuran file saja, bukan semua hal yang tidak perlu.
sumber
wc
berfungsi untuk ini lebih baik, jika Anda memerlukan ukuran dalam byte.Awk dapat memperbaiki keluaran untuk memberikan apa yang diminta oleh penanya. Pada sistem Solaris 10 saya, temukan -ls mencetak ukuran dalam KB sebagai kolom kedua, jadi:
Jika tidak, gunakan -exec ls -lh dan pilih kolom size dari output. Sekali lagi di Solaris 10:
sumber
Mengapa tidak menggunakan du -a ? Misalnya
Bekerja di Mac
sumber
Saya berjuang dengan ini di Mac OS X di mana perintah find tidak mendukung
-printf
.Solusi yang saya temukan, yang memang bergantung pada 'grup' untuk semua file menjadi 'staf' adalah ...
Ini membagi output panjang menjadi tiga token
Dan kemudian mengeluarkan token 2 dan 3, yaitu keluaran adalah jumlah byte dan kemudian nama file
sumber
find
tersedia melalui homebrew denganbrew install findutils
Ini akan memberi Anda apa yang Anda cari, termasuk pemformatan (yaitu nama file pertama dan ukuran sesudahnya):
keluaran sampel (di mana saya biasa
-iname "*.php"
mendapatkan beberapa hasil):sumber
Anda bisa mencoba ini:
Ini akan memberi Anda ukuran dalam byte. Tetapi perintah du juga menerima parameter -k untuk KB dan -m untuk MB. Ini akan memberi Anda keluaran seperti
sumber
sumber
Referensi Scripter World
sumber
Coba perintah berikut:
GNU
stat
:BSD
stat
:Namun
stat
tidak standar, jadidu
atauwc
bisa menjadi pendekatan yang lebih baik:sumber
sumber
Jika Anda perlu mendapatkan ukuran total, berikut adalah proposal skrip
sumber