Yanıtlar:
Böyle bir komut kullanmalısınız:
find /group/book/four/word/ -type f -exec wc -l {} + | sort -rn
find: istediğiniz yoldaki dosyaları arayın. Özyinelemeyi istemiyorsanız ve finduygulamanız destekliyorsa -maxdepth 1, -execseçeneğin hemen önüne eklemelisiniz .exec: komuta wc -lher dosya üzerinde çalışmasını söyler .sort -rn: sonuçları sayısal olarak ters sırada sıralayın. Yukarıdan aşağıya doğru.(dosya adlarının yeni satır karakterleri içermediğini varsayar).
wcda bir totalsatır yazdırılacağını , bu nedenle burada yalnızca bir dosya olmadığı sürece bir veya daha fazla "toplam" satır alacağınızı unutmayın. . Bunları grep /çıkarmak için boru olabilir .
sortkomuta
Özyinelemeye ihtiyacınız yoksa muhtemelen en basit versiyon:
wc -l /group/book/four/word/*|sort -n
wcsayar hatları (opsiyon -lher cinsinden) (ama gizli) ( *) altındaki dosyalar /group/book/four/word/ve sort(boru aracılığıyla sonucunu sıralar |) sayısal olarak (opsiyon -n).
Birisi bu cevabı grep -rlcbastırmadan önce söyleyerek yorum yaptı . Nitekim grep, özellikle özyinelemeye ihtiyacınız varsa, harika bir alternatif:
grep -rc '^' /group/book/four/word/|tr ':' ' '|sort -n -k2
(seçenek -c) özyinelemeli (isteğe bağlı -r) dizinde eşleşen ( grep) '^'(satırların başlangıcı ) satırları sayar /group/book/four/word/. Daha sonra , ikinci sütunda (isteğe bağlı ) sayısal olarak (isteğe bağlı ) sıralamak istediğiniz , örneğin tryardım sortetmek için kullanarak , boşluğu bir boşlukla değiştirmeniz gerekir .-n-k2
Güncelleme: Stephane'nin olası sınırlamalar ve gerçekte nasıl kurtulacağınız hakkındaki yorumlarını görün tr.
grep -c .En az bir geçerli karakter içeren satırları sayar. grep -c '^'Tüm satırları saymak için kullanın (ayrıca bazı grepuygulamalarda son satırdan sonra gelen karakterleri de sayar ). Tüm grepuygulamaların a'yı desteklemediğini -rve davranışların, olanlar arasında farklılık gösterdiğini unutmayın. :S (virgül, noktalı virgül değil) alanlarına çevirmeniz gerekmez sort. Sadece kullan -t:. Dosya adlarının :veya boş veya yeni satır karakterleri içermediğini varsayalım.
wcBirden çok yoldan geçerseniz tüm bu kadar kullanışlı bir toplam verdiğini bilmiyordum . Bu fonksiyonelliğin joker kartla ve boruyla birleştirilmesi sortgerçekten temiz.
İle zsh:
lines() REPLY=$(wc -l < $REPLY)
printf '%s\n' /group/book/four/word/*(.no+lines)
Dosyadaki satır sayısına cevap veren yeni bir sıralama işlevi tanımlarız lines. Ve (sayısal sıralama için) ile birlikte glob sonuçlarının nasıl sıralandığını tanımlayan o+linesglob niteleyicisini kullanıyoruz n. ( .ayrıca sadece normal dosyaları kontrol etmek için eklendi).
Bu, dosya adlarının gizli dosyalardan başka hangi karakterleri içerebileceğini (bununla başlayanlar .) çıkarıldığına dair hiçbir varsayımda bulunmaz. Dİsterseniz glob niteleyicisini de ekleyin .
bashsadece ile etiketlendi ...
Ayrıca, dosyaları alt dizinlerinde de isteyip istemediğinizi belirtmezsiniz /group/book/four/word. findJherran yanıtında çözüm alt dizinleri içine inecektir. İstenmiyorsa, kabuğu kullanın:
for file in ./*; do [ -f "$file" ] && wc -l "$file"; done | sort -n
Dosya adlarınız yeni satırlar içeriyorsa, şunun gibi bir şey kullanabilirsiniz:
for file in ./*; do
[ -f "$file" ] &&
printf "%lu %s\0" "$(wc -l < "$file")" "$file"
done | sort -zn | tr '\0' '\n'
Eğer Son olarak, eğer do alt dizinleri içine dalmak istediğinizde, size bu kullanabilir bash4 veya üzeri:
shopt -s globstar
for file in ./**/*; do [ -f "$file" ] && wc -l "$file"; done | sort -n
bash4.3'ten önceki sürümlerin , dizin ağacını yinelemeli olarak alçalırken sembolik işaretleri takip ettiğini unutmayın ( zsh's ya da tcsh' gibi ***/*).
Ayrıca, yukarıdaki tüm çözümler gizli dosyaları görmezden gelecektir (adı a ile başlayanlar ., shopt -s dotglobonları dahil etmek için kullanırlar) ve ayrıca sembolik bağlantıların satır sayısını da içerecektir ( findyaklaşımın kullanmayacağı).
-xtype fGNU bulmasında veya *(-.)zsh'da) ve gizli dosyaları atlayacağına dikkat edin .
%luiçinde printf? Hatırladığım kadarıyla, bu uzun imzasız ondalık demektir, gerçekten gerekli mi? Neden numarayı bir dize olarak ele almıyorsunuz? Bir fark yaratıyor mu?
0biraz daha iyi olan boş dize yerine genişleyecektir . Bazı sıralama uygulamaları, bazıları imzalı olan imzasız tamsayılarla çalışır. %luen güvenli bahis gibi gözükse de, muhtemelen her zaman 2^31yaşlanacak, çizgileriniz varmış gibi bir önemi yoktur .
Eğer yüklemek istiyorsanız fdRust yazılmış gerçekten hızlı dosya bulucu (takmanız gerekir, yine de olması harika)
fd --type=file . | xargs wc -l | sort -n
Temel olarak fddosyaları listeler, xargs dosyaların listesini geçirir wc(kelime sayımını gösterir, ancak -l satırlarını sayır), en sonunda en az satırdan en çok kullanılana kadar sıralanır sort -n.
ls -lSatır sayısını vermez.ls -lSbazılsuygulamalarda dosyayı boyutuna göre sıralar ( boyut , içerikteki bayt sayısıdır).