Saya ingin tahu ukuran file dengan ekstensi .o (file objek) di folder Beranda saya.
Saya dapat menemukan semua file objek menggunakan
find . -name '*.o'
Bagaimana saya bisa menghitung ukuran total file-file itu?
sumber
Saya ingin tahu ukuran file dengan ekstensi .o (file objek) di folder Beranda saya.
Saya dapat menemukan semua file objek menggunakan
find . -name '*.o'
Bagaimana saya bisa menghitung ukuran total file-file itu?
Anda sedang mencari pipa ( |
). Mereka adalah cara menghubungkan beberapa perintah dan meneruskan output dari satu perintah sebagai input ke perintah lainnya. Dalam hal ini, Anda ingin meneruskan semua nama file yang Anda temukan sebagai input du
(yang menghitung ukuran). Namun, karena du
mengharapkan nama file dan hasilnya find
hanya daftar teks (ya, teks terdiri dari nama file, tetapi du
tidak bisa tahu itu, semua yang dilihatnya adalah teks), Anda perlu menggunakan sesuatu seperti xargs
yang akan mengambil masing-masing file baris teks, memperlakukannya sebagai nama file dan meneruskannya ke du
. Menyatukan semua ini, kita dapatkan:
find . -name "*.o" | xargs du -sch
Anda harus selalu mengutip pola yang Anda berikan find
(seperti yang saya lakukan di atas "*.o"
:). Jika tidak, shell akan memperluas *.o
ke nama file yang cocok di direktori saat ini. Ini berfungsi dalam hal ini hanya karena Anda tidak memiliki file yang cocok.
The -sch
bendera untuk du
didokumentasikan di man du
:
-c, --total
produce a grand total
-h, --human-readable
print sizes in human readable format (e.g., 1K 234M 2G)
-s, --summarize
display only a total for each argument
Perhatikan, bagaimanapun, bahwa ini akan gagal untuk nama file yang mengandung spasi putih. Ini hampir pasti tidak akan menjadi masalah untuk file objek, tetapi di masa depan, jika Anda juga perlu berurusan dengan spasi, gunakan:
find . -name "*.o" -print0 | xargs -0 du -sch
The -print0
merek find
mencetak garis NULL dipisahkan dan -0
merek xargs
mengambil garis seperti input.
Atau, Anda dapat find
mencetak ukurannya sendiri dan kemudian menjumlahkannya:
find . -name "*.o" -printf '%s\n' | awk '{c+=$1}END{print c}'
Ini juga akan mengatasi masalah yang disebutkan oleh @Serg dalam komentar di mana ada terlalu banyak argumen dan perintah dipecah menjadi perintah yang terpisah.
Jika Anda menggunakan bash
(mungkin memang demikian), ada cara yang lebih sederhana:
shopt globstar
du -sch **/*.o
The shopt globstar
merek perintah **
cocok dengan semua file dan atau lebih subdirektori. Setelah mengaktifkannya, **/*.o
akan cocok dengan semua file (dan direktori) yang namanya berakhir .o
, sehingga kami dapat meneruskannya langsung ke du
.
Perhatikan bahwa, tidak seperti find
pendekatan, ini tidak akan cocok dengan file tersembunyi (yang namanya dimulai dengan a .
). Untuk mencocokkannya juga, lakukan:
shopt -s dotglob globstar
du -sch **/*.o
du
, dan akan menghasilkan beberapatotal
baris. Contohnya: paste.ubuntu.com/23092752Gunakan
-exec
flag untuk menjalankandu
perintah dengan;
(artinya per setiap file)Output sampel:
find
bersifat rekursif - artinya berjalan melalui semua subdirektori. Jika Anda hanya ingin mendapatkan total semua*.o
file di direktori saat ini, lakukan sajasumber
dengan perl:
Ukuran semua file PDF yang tidak disembunyikan di direktori saat ini.
sumber
.o
file dan mereka bisa di subdirektori. Anda mungkin juga ingin menambahkan}{
sebelumnyaprint $sum
untuk menghindari mencetak jumlah untuk setiap iterasi. Kami hanya menginginkan yang terakhir.