GNU/Linux >> Belajar Linux >  >> Linux

Mencantumkan Jumlah File Di Setiap Folder Dimana Nama Folder Cocok Dengan Pola?

Saya ingin mencari pohon direktori secara rekursif dan mencantumkan jumlah file yang tersedia di setiap folder yang memiliki nama yang sesuai dengan string yang diberikan. Akibatnya, saya ingin mengembalikan hasil:

ls -l | wc -l

untuk setiap folder yang saya identifikasi melalui find .

Kode

Kode di bawah ini dengan benar mencantumkan jumlah file di setiap folder yang namanya berisi Data Ajaib string.

find /path/to/cool/stuff                                 
        -maxdepth 4                                      
        -type d                                          
        -name '*Magic Data*'                             
        -print0 | xargs                                  
                --verbose                                
                -0 -I {} ls -l {}               

Saya ingin memperluasnya dan menyalurkan hasil ls ke wc -l .

Coba

find /path/to/cool/stuff                                 
        -maxdepth 4                                      
        -type d                                          
        -name '*Magic Data*'                             
        -print0 | xargs                                  
                --verbose                                
                -0 -I {} ls -l {}  | wc -l            

Ini gagal dan mencetak:

ls -l /path/to/cool/stuff/some/folders/Magic Data
ls -l /path/to/cool/stuff/some/folders2/Magic Data

Keluaran yang diinginkan

/path/to/cool/stuff/some/folders/Magic Data  29
/path/to/cool/stuff/some/folders2/Magic Data 30

Output yang diinginkan akan berisi:

  • Jalur lengkap ke folder yang dicari
  • Keluaran dari wc -l , yang dalam hal ini mencerminkan jumlah file yang tidak disembunyikan

Jawaban yang Diterima:

Ada dua cara utama untuk menyelesaikan ini:

  1. Ubah find perintah sehingga hanya memasuki direktori yang Anda minati dan kemudian mencetak satu karakter (mis. x ) untuk setiap file yang ditemukan di dalamnya. Kemudian hitung jumlah karakter yang dihasilkan dengan wc -l . Lebih aman untuk menampilkan karakter daripada nama path karena nama path di Unix berpotensi berisi baris baru. Solusi ini agak rumit karena melibatkan penggunaan -prune untuk mengabaikan direktori yang tidak kami minati, atau sebagai alternatif ! -path .

  2. Temukan direktori seperti yang telah Anda lakukan sejauh ini, tetapi kemudian gunakan skrip in-line untuk menghitung file di dalamnya. Ini lebih sederhana, dan apa yang saya tunjukkan di bawah.

find /path/to/cool/stuff -maxdepth 4 -type d -name "*Magic Data*' 
    -exec bash -O dotglob -c '
        dir=$1
        set -- "$dir"/*
        printf "%s %dn" "$dir" "$#"' bash {} ';'

Di sini, kami menemukan direktori seperti yang Anda lakukan, kemudian, untuk setiap direktori, kami menjalankan bash singkat ini naskah:

dir=$1
set -- "$dir"/*
printf "%s %dn" "$dir" "$#"

Ini mengambil nama path direktori dari baris perintah (diberikan oleh find ), dan memperluas * pola glob di dalamnya. Dengan mengatur dotglob opsi shell pada baris perintah untuk skrip, kami dijamin juga menghitung file dan direktori tersembunyi (hapus -O dotglob untuk tidak menghitung nama tersembunyi).

Terkait:Bagaimana cara mengaktifkan akses ke perangkat USB di dalam tamu VirtualBox?

Kami melakukan perluasan semua nama sebagai argumen ke set , yang akan mengatur parameter posisi ke entri yang diperluas. Jumlah parameter posisi tersedia sebagai $# , yang juga merupakan jumlah file dalam direktori tertentu.

Terkait:

  • Memahami opsi -exec dari `find`

Linux
  1. Cara Menemukan Jumlah File dalam Direktori dan Subdirektori

  2. Bagaimana Cara Mencetak Nama File Yang Hilang Dalam Folder?

  3. Apa Cara Terbaik Untuk Menghitung Jumlah File Dalam Direktori?

  1. Memformat Ulang Sejumlah Besar File Xml?

  2. Hitung Jumlah File Dalam Folder Per Hari?

  3. Temukan file dengan karakter windows ilegal dalam namanya di Linux

  1. Bagaimana Cara Mencari Di File Tertentu yang Sesuai Dengan Pola?

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

  3. Temukan direktori yang berisi sejumlah file