.c
Geniş bir karmaşık dizin yapısında kaç normal dosyanın uzantısına sahip olduğunu ve ayrıca bu dosyaların kaç dizine yayıldığını bilmek istiyorum . İstediğim çıktı sadece bu iki sayı.
Dosya sayısını nasıl alacağınızla ilgili bu soruyu gördüm , ancak dosyaların da içinde bulunduğu dizin sayısını bilmem gerekiyor.
- Dosya adlarımın (dizinler dahil) herhangi bir karakteri olabilir; bunlar
.
veya ile başlayabilir-
ve boşlukları veya yeni satırları olabilir. - İsimleri ile biten bazı linklerim
.c
ve dizinlerle olan linklerim olabilir . Simgelerin takip edilmesini veya sayılmasını istemiyorum ya da en azından bunların sayılarak hesaplanıp hesaplanmadığını bilmek istiyorum. - Dizin yapısının birçok düzeyi vardır ve üst düzey dizinin (çalışma dizini) içinde en az bir
.c
dosya vardır.
Aceleyle (Bash) kabuğuna kendim saymak için bazı komutlar yazdım, ancak sonucun doğru olduğunu düşünmüyorum ...
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
Bu, belirsiz yönlendirmelerle ilgili şikayetler çıkarır, geçerli dizindeki dosyaları kaçırır ve özel karakterlere gider (örneğin, yönlendirilen find
çıktı dosya adlarında yeni satırlar yazdırır ) ve bir sürü boş dosya (ayy) yazar.
.c
Dosyalarımı ve içerdiği dizinleri nasıl güvenilir bir şekilde numaralandırabilirim ?
Yardımcı olması durumunda, kötü adlara ve semboliklere sahip bir test yapısı oluşturmak için bazı komutlar şunlardır:
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
Ortaya çıkan yapıda, 7 dizin .c
dosya içerir ve 29 normal dosya biter .c
( dotglob
komutlar çalıştırıldığında kapalıysa) (yanlış saydım, lütfen bana bildirin). Bunlar istediğim rakamlar.
Çekinmeyin değil bu özel testini kullanmak.
Not: Herhangi bir kabuk veya başka bir dilde cevaplar benim tarafımdan test edilecek ve takdir edilecektir. Yeni paketler yüklemem gerekirse sorun yok. Bir GUI çözümü biliyorsanız, paylaşmanızı öneririm (ancak test etmek için bütün bir DE yüklemek için o kadar ileri gidemeyebilirim) :) Ubuntu MATE 17.10 kullanıyorum.