GNU/Linux >> Belajar Linux >  >> Linux

du yang menghitung jumlah file/direktori daripada ukuran

Saya telah menemukan du --inodes berguna, tapi saya tidak yakin versi du yang mana itu membutuhkan. Di Ubuntu 17.10, berikut ini berfungsi:

du --inodes      # all files and subdirectories
du --inodes -s   # summary
du --inodes -d 2 # depth 2 at most

Gabungkan dengan | sort -nr untuk mengurutkan turun berdasarkan jumlah inode yang berisi.


Cara termudah sepertinya adalah find /path/to/search -ls | wc -l

Temukan digunakan untuk menelusuri semua file dan folder.
-ls untuk mendaftar (mencetak) semua nama. Ini adalah default dan jika Anda meninggalkannya, itu akan tetap berfungsi hampir di semua sistem. (Hampir, karena beberapa mungkin memiliki default yang berbeda). Merupakan kebiasaan yang baik untuk menggunakan ini secara eksplisit.

Jika Anda hanya menggunakan find /path/to/search -ls bagian itu akan mencetak semua file dan direktori ke layar Anda.


wc adalah jumlah kata. -l opsi memberitahunya untuk menghitung jumlah baris.

Anda dapat menggunakannya dalam beberapa cara, mis.

  • file uji wc
  • berkas uji kucing | wc

Opsi pertama memungkinkan wc membuka file dan menghitung jumlah baris, kata, dan karakter dalam file itu. Opsi kedua melakukan hal yang sama tetapi tanpa nama file dibaca dari stdin.


Anda dapat menggabungkan perintah dengan pipa | . Keluaran dari perintah pertama akan disalurkan ke masukan dari perintah kedua. Jadi find /path/to/search -ls | wc -l menggunakan find untuk mendaftar semua file dan direktori dan memasukkan output ke wc. Wc kemudian menghitung jumlah baris.

(Alternatif lain adalah `ls | wc', tetapi find jauh lebih fleksibel dan merupakan alat yang bagus untuk dipelajari.)

[Edit setelah komentar]

Mungkin berguna untuk menggabungkan find dan exec.

Misalnya. find / -type d ! \( -path proc -o -path dev -o -path .snap \) -maxdepth 1 -exec echo starting a find to count to files in in {} \; akan mencantumkan semua direktori di /, kecuali beberapa yang tidak ingin Anda cari. Kita dapat memicu perintah sebelumnya pada masing-masingnya, menghasilkan jumlah file per folder di /.

Namun:

  1. Ini menggunakan ekstensi khusus GNU -maxdepth.
    Ini akan berfungsi di Linux, tetapi tidak di sembarang unix-a-like.
  2. Saya curiga Anda mungkin benar-benar menginginkan sejumlah file untuk setiap subdirektori.

Skrip PHP berikut melakukan triknya.

#!/usr/bin/php
<?php 

function do_scan($dir, $dev) {
  $total = 1;

  if (\filetype($dir) === 'dir' && \lstat($dir)['dev'] == $dev) {
    foreach (\scandir($dir) as $file) {
      if ($file !== '.' && $file !== '..') {
        $total += do_scan($dir . \DIRECTORY_SEPARATOR . $file, $dev);
      }
    }

    print "$total\t$dir\n";
  }

  return $total;
};

foreach (\array_slice($argv, 1) as $arg) {
  do_scan($arg, \lstat($arg)['dev']);
}

Masukkan itu ke dalam file (katakanlah, "treesize "), chmod +x dan jalankan dengan ./treesize . | sort -rn | less .


Linux
  1. Temukan File atau Direktori Terbesar?

  2. Bagaimana Cara Mencari File Berdasarkan Ukuran Dan Ekstensi?

  3. Menampilkan Semua File '.sh' Dengan Ukuran Lebih Dari 5kb?

  1. Bagaimana menemukan semua file yang lebih besar dari ukuran 1GB di Linux?

  2. temukan file yang memiliki nomor dalam nama file lebih besar dari

  3. Bagaimana menemukan direktori terbesar atau file terbesar?

  1. Cara Menemukan Jumlah File dalam Direktori dan Subdirektori

  2. Temukan direktori dengan semua file di dalamnya lebih tua dari X?

  3. Temukan direktori yang berisi sejumlah file