ls
के लिए -U
विकल्प POSIX में नहीं है, और में है ओएस एक्स के ls
यह जीएनयू ls
, जो है कि यह -t
और -l
उपयोग सृजन बार के बजाय बनाता है से एक अलग अर्थ नहीं है संशोधन के समय -f
एक एक्सएसआई एक्सटेंशन के रूप में POSIX में है। जीएनयू ls
का मैनुअल -f
do not sort, enable -aU, disable -ls --color
और -U
do not sort; list entries in directory order
के रूप में वर्णित करता है।
POSIX का वर्णन करता है -f
इस तरह:
फोर्स प्रत्येक तर्क एक निर्देशिका के रूप में व्याख्या और नाम प्रत्येक स्लॉट में पाया सूची किया जाना है। यह विकल्प -l
, -t
, -s
, और -r
बंद कर देगा, और -a
चालू करेगा; ऑर्डर वह क्रम है जिसमें निर्देशिका में प्रविष्टियां दिखाई देती हैं।
ls|wc -l
जैसे कमांड गलत परिणाम देते हैं जब फ़ाइल नामों में न्यूलाइन होती है।
zsh में आप कुछ इस तरह कर सकते हैं:
a=(*(DN));echo ${#a}
D
(glob_dots
) फ़ाइलें जिसका नाम अवधि और N
(null_glob
) के साथ शुरू होता शामिल का कारण बनता है नहीं करने के लिए आदेश में एक खाली निर्देशिका में एक त्रुटि में परिणाम ।
या बैश में एक ही:
shopt -s dotglob nullglob;a=(*);echo ${#a[@]}
IFS
ASCII अंक हैं, तो ${#a[@]}
को दोहरे उद्धरण चिह्नों जोड़ें। यह सुनिश्चित करने के लिए कि failglob
अनसेट है, shopt -u failglob
जोड़ें।
एक पोर्टेबल विकल्प find
उपयोग करने के लिए है:
find . ! -name . -prune|grep -c/
grep -c /
wc -l
साथ बदला जा सकता है, तो फ़ाइल नाम नई पंक्तियां शामिल नहीं है। ! -name . -prune
-mindepth 1 -maxdepth 1
के लिए एक पोर्टेबल विकल्प है।
या यहाँ एक और विकल्प है कि आम तौर पर फ़ाइलें जिसका नाम अवधि के साथ शुरू होता है शामिल नहीं है:
set -- *;[ -e "$1" ]&&echo "$#"
आदेश ऊपर तथापि फ़ाइलें जिसका नाम अवधि के साथ शुरू होता है शामिल है जब पार्टी में dotglob
या glob_dots
जैसा कोई विकल्प zsh में सेट है। जब *
कोई फ़ाइल मेल नहीं खाता है, तो आदेश डिफ़ॉल्ट सेटिंग्स के साथ zsh में त्रुटि में परिणाम देता है।
'एलएस | wc -l' ओ (1) नहीं है? – halfdan
एलएस | wc -l ls को सभी फ़ाइलों पर एक opendir(), readdir() और शायद एक stat() करने के लिए कारण होगा। यह आम तौर पर कम से कम ओ (एन) होगा। – MarkR
@halfdan: ls सभी फ़ाइलों को आउटपुट करता है, इसलिए यह ओ (एन) – yassin