Saya ingin tahu berapa banyak file biasa memiliki ekstensi .c
dalam struktur direktori besar yang kompleks, dan juga berapa banyak direktori file ini tersebar. Output yang saya inginkan hanyalah dua angka itu.
Saya telah melihat pertanyaan ini tentang cara mendapatkan jumlah file, tetapi saya perlu tahu jumlah direktori file juga.
- Nama file saya (termasuk direktori) mungkin memiliki karakter apa saja; mereka mungkin mulai dengan
.
atau-
dan memiliki spasi atau baris baru. - Saya mungkin memiliki beberapa symlink yang namanya diakhiri dengan
.c
, dan symlink ke direktori. Saya tidak ingin symlink diikuti atau dihitung, atau setidaknya saya ingin tahu apakah dan kapan mereka dihitung. - Struktur direktori memiliki banyak tingkatan dan direktori tingkat atas (direktori kerja) memiliki setidaknya satu
.c
file di dalamnya.
Saya buru-buru menulis beberapa perintah di shell (Bash) untuk menghitungnya sendiri, tapi saya rasa hasilnya tidak akurat ...
shopt -s dotglob
shopt -s globstar
mkdir out
for d in **/; do
find "$d" -maxdepth 1 -type f -name "*.c" >> out/$(basename "$d")
done
ls -1Aq out | wc -l
cat out/* | wc -l
Ini menghasilkan keluhan tentang pengalihan ambigu, melewatkan file di direktori saat ini, dan tersandung pada karakter khusus (misalnya, output yang diarahkan find
mencetak baris baru dalam nama file ) dan menulis sejumlah besar file kosong (oops).
Bagaimana saya dapat dengan andal menyebutkan .c
file - file saya dan direktori yang mengandungnya?
Jika itu membantu, berikut adalah beberapa perintah untuk membuat struktur pengujian dengan nama dan symlink yang buruk:
mkdir -p cfiles/{1..3}/{a..b} && cd cfiles
mkdir space\ d
touch -- i.c -.c bad\ .c 'terrible
.c' not-c .hidden.c
for d in space\ d 1 2 2/{a..b} 3/b; do cp -t "$d" -- *.c; done
ln -s 2 dirlink
ln -s 3/b/i.c filelink.c
Dalam struktur yang dihasilkan, 7 direktori berisi .c
file, dan 29 file biasa diakhiri dengan .c
(jika dotglob
tidak aktif ketika perintah dijalankan) (jika saya salah hitung, beri tahu saya). Ini adalah angka yang saya inginkan.
Silahkan tidak menggunakan tes khusus ini.
NB: Jawaban dalam bahasa apa pun atau bahasa lain akan diuji & dihargai oleh saya. Jika saya harus menginstal paket baru, tidak ada masalah. Jika Anda tahu solusi GUI, saya mendorong Anda untuk berbagi (tapi saya mungkin tidak akan menginstal sejauh DE untuk mengujinya) :) Saya menggunakan Ubuntu MATE 17.10.