Saya melakukan pengikisan situs web untuk proyek konversi. Saya ingin melakukan beberapa statistik pada jenis file di sana - misalnya, 400 .html
file, 100 .gif
, dll. Apa cara mudah untuk melakukan ini? Itu harus bersifat rekursif.
Sunting: Dengan skrip yang diposting maxschelpzig, saya mengalami beberapa masalah karena arsitektur situs yang saya memo. Beberapa file memiliki nama *.php?blah=blah&foo=bar
dengan berbagai argumen, jadi semuanya dianggap unik. Jadi solusinya perlu mempertimbangkan *.php*
semua dari jenis yang sama, sehingga untuk berbicara.
*.php?blah=blah&foo=bar
dengan berbagai argumen, jadi semuanya dianggap unik. Bagaimana saya bisa memodifikasinya untuk dicari*.php*
?sed 's/^.*\(\.[a-zA-Z0-9][a-zA-Z0-9][a-zA-Z0-9]\).*$/\1/'
find -name '.*' -prune -o -type f -print
dievaluasi seperti: jika entri direktori cocok.*
maka pangkas, jika tidak, itu adalah file kemudian cetak. Karena.*
juga cocok.
, yaitu CWD, semuanya dipangkas, yaitu menemukan bahkan tidak turun ke direktori pertama. Mungkin, versi 2 tahunfind
berperilaku berbeda - atau itu hanya kekhilafan saya, saat itu. Bagaimanapun,find -name '.*' -not -name . -prune -o -type f -print
perbaiki ini.Dengan zsh:
The Pola
**/?*.*
cocok dengan semua file yang memiliki ekstensi, di direktori saat ini dan subdirektorinya secara rekursif. The kualifikasi gumpalD
biarkanzsh
melintasi direktori bahkan tersembunyi dan mempertimbangkan file tersembunyi,.
memilih hanya file biasa. The pengubah sejarah mempertahankan hanya ekstensi file.print -rl
mencetak satu kecocokan per baris.uniq -c
menghitung item identik berturut-turut (hasil gumpalan sudah diurutkan). Panggilan terakhir untuksort
mengurutkan ekstensi dengan menggunakan hitungan.sumber
Satu garis ini tampaknya merupakan metode yang cukup kuat:
The
find . -type f -printf '%f\n'
cetakan yang basename setiap file biasa di pohon, tanpa direktori. Itu menghilangkan harus khawatir tentang direktori yang mungkin ada.
di dalamnya dised
regex Anda .The
sed -r -n 's/.+(\..*)$/\1/p'
menggantikan nama file yang masuk dengan hanya ekstensi. Misalnya,.somefile.ext
menjadi.ext
. Catat inisial.+
dalam regex; ini menghasilkan setiap kecocokan yang membutuhkan setidaknya satu karakter sebelum ekstensi.
. Ini mencegah nama file seperti.gitignore
tidak diperlakukan sama sekali tanpa nama dan ekstensi '.gitignore', yang mungkin Anda inginkan. Jika tidak, ganti.+
dengan a.*
.Sisa kalimat berasal dari jawaban yang diterima.
Sunting : Jika Anda ingin histogram yang diurutkan dengan baik dalam format bagan Pareto , tambahkan saja yang lain
sort
ke akhir:Contoh output dari pohon sumber Linux yang dibangun:
sumber
Saya telah memasukkan skrip bash ke
~/bin
folder saya yang dipanggilexhist
dengan konten ini:Di direktori mana pun saya berada, saya cukup ketik 'exh', tab pelengkap otomatis, dan saya melihat sesuatu seperti ini:
PS Memotong bagian setelah tanda tanya harus mudah dilakukan dengan perintah sed lain mungkin setelah yang terakhir (saya belum mencobanya):
sed 's/\?.*//'
sumber