GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana cara menemukan file dan menjumlahkan ukurannya?

Solusi

Dengan menyediakan opsi -c (atau --total ) ke du(1) , Anda dapat menginstruksikannya untuk menghasilkan total keseluruhan. Jika implementasi Anda dari du(1) mendukung salah satu opsi ini, Anda dapat mencapai efek yang diinginkan menggunakan perintah berikut:

$ find . -name 'flibble*' -ctime +90 -exec du -shc {} +

EDIT: Perhatikan bahwa jika jumlah file melebihi jumlah maksimum parameter yang diizinkan oleh sistem Anda, find mungkin masih mengeksekusi command beberapa kali. Beberapa implementasi du(1) juga mendukung pembacaan nama file dari file, yang tidak mengalami batasan yang disebutkan:

$ find -name 'flibble*' -ctime +90 -print0 > filenames
$ du -shc --files0-from=filenames

Penjelasan

Perbedaan antara semantik -exec command {} \; dan -exec command {} + adalah sebagai berikut:

  • command {} \; mengeksekusi command satu kali untuk setiap hasil find . Nama jalur dari hasil diteruskan sebagai ganti {} .

    $ touch 1 2 3
    $ find  1 2 3 -maxdepth 0 -exec echo {} \;
    1
    2
    3
    
  • command {} + mengeksekusi command , ketika semua hasil telah diambil. Nama jalur dari hasil diteruskan sebagai ganti {} .

    $ touch 1 2 3
    $ find  1 2 3 -maxdepth 0 -exec echo {} +
    1 2 3
    

-print0 opsi menyebabkan find(1) untuk mencetak nama file yang ditemukan ke keluaran standar yang dipisahkan oleh karakter nol, dan kode --files0-from opsi menyebabkan du(1) untuk membaca nama file yang dipisahkan null. Tidak seperti karakter baris baru, karakter null mungkin tidak muncul dalam nama file, sehingga hasilnya tidak ambigu.

Untuk mempelajari lebih lanjut tentang opsi du(1) dan find(1) , Anda harus berkonsultasi dengan masing-masing halaman manual:

$ man du
$ man find

Coba ini:

du -c `find . -name 'flibble*' -ctime +90` | tail -1

Perintah aslinya adalah memberikan du satu argumen, lalu menjalankannya, hingga melewati semua argumen. Dengan cara ini, Anda cukup memberikan semua argumen sekaligus, lalu memotong ukuran yang terpisah, dan hanya menyisakan totalnya. Anda dapat menghapus pipa dan ekor untuk menunjukkan ukuran setiap file jika Anda mau.


Anda dapat mencoba ini:

find . -name 'flibble*' -ctime +90 -exec du -ch {} + | grep total

Linux
  1. Cara Menemukan File Konfigurasi MySQL, PHP dan Apache

  2. Cara Menemukan Jumlah File dalam Direktori dan Subdirektori

  3. Bagaimana Cara Mencari File Berdasarkan Ukuran Dan Ekstensi?

  1. Cara Menemukan File Dengan Izin SUID dan SGID di Linux

  2. Temukan dan salin file

  3. Bagaimana cara menghitung jumlah baris file yang ditemukan?

  1. Cara Menemukan dan Menghapus Direktori dan File Kosong di Unix

  2. Cara Menemukan dan Menghapus Direktori dan File Kosong di Linux

  3. Menggunakan ls untuk membuat daftar direktori dan ukuran totalnya