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 find
uygulamanız destekliyorsa -maxdepth 1
, -exec
seçeneğin hemen önüne eklemelisiniz .exec
: komuta wc -l
her 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).
wc
da bir total
satı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 .
sort
komuta
Özyinelemeye ihtiyacınız yoksa muhtemelen en basit versiyon:
wc -l /group/book/four/word/*|sort -n
wc
sayar hatları (opsiyon -l
her 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 -rlc
bastı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 tr
yardım sort
etmek 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ı grep
uygulamalarda son satırdan sonra gelen karakterleri de sayar ). Tüm grep
uygulamaların a'yı desteklemediğini -r
ve 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.
wc
Birden çok yoldan geçerseniz tüm bu kadar kullanışlı bir toplam verdiğini bilmiyordum . Bu fonksiyonelliğin joker kartla ve boruyla birleştirilmesi sort
gerç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+lines
glob 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 .
bash
sadece ile etiketlendi ...
Ayrıca, dosyaları alt dizinlerinde de isteyip istemediğinizi belirtmezsiniz /group/book/four/word
. find
Jherran 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 bash
4 veya üzeri:
shopt -s globstar
for file in ./**/*; do [ -f "$file" ] && wc -l "$file"; done | sort -n
bash
4.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 dotglob
onları dahil etmek için kullanırlar) ve ayrıca sembolik bağlantıların satır sayısını da içerecektir ( find
yaklaşımın kullanmayacağı).
-xtype f
GNU bulmasında veya *(-.)
zsh'da) ve gizli dosyaları atlayacağına dikkat edin .
%lu
iç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?
0
biraz daha iyi olan boş dize yerine genişleyecektir . Bazı sıralama uygulamaları, bazıları imzalı olan imzasız tamsayılarla çalışır. %lu
en güvenli bahis gibi gözükse de, muhtemelen her zaman 2^31
yaşlanacak, çizgileriniz varmış gibi bir önemi yoktur .
Eğer yüklemek istiyorsanız fd
Rust 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 fd
dosyaları 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 -l
Satır sayısını vermez.ls -lS
bazıls
uygulamalarda dosyayı boyutuna göre sıralar ( boyut , içerikteki bayt sayısıdır).