สิ่งใดที่เกี่ยวข้องกับls
การสร้างผลลัพธ์ที่ไม่คาดคิดด้วยตัวอักษรพิเศษ ความนิยมใด ๆ (เช่นอาร์เรย์) ไม่สามารถเคลื่อนย้ายได้ อะไรก็ได้ที่เกี่ยวข้องwhile read
มักจะช้า
ในอีกทางหนึ่งfind
มีความยืดหยุ่นมาก (ตัวเลือกมากมายสำหรับตัวกรอง) มันมี [อย่างน้อย] สองไวยากรณ์ที่ไม่ปลอดภัยสำหรับตัวอักษรพิเศษ ... และปรับขนาดได้ดีในไดเรกทอรีขนาดใหญ่
สำหรับตัวอย่างนี้ฉันใช้-iname
เพื่อจับคู่ชื่อส่วนขยายตัวพิมพ์ใหญ่และตัวพิมพ์เล็ก ฉันยัง จำกัด ที่-maxdepth 1
จะเคารพคำถามของคุณ "ในไดเรกทอรีปัจจุบัน" แทนที่จะนับจำนวนบรรทัดที่ชื่อไฟล์อาจรวมถึง CR / LF -print0
จะพิมพ์ NULL ไบต์ที่ส่วนท้ายของชื่อไฟล์แต่ละไฟล์ ... ดังนั้นการ| tr -d -c "\000" | wc -l
นับจำนวนไฟล์อย่างแม่นยำ (NULL ไบต์!)
extensions="jpg png gif"
for ext in $extensions; do
c=$(find . -maxdepth 1 -iname "*.$ext" -print0 | tr -d -c "\000" | wc -c)
if [ $c -gt 0 ]; then
echo "Found $c *.$ext files"
find . -maxdepth 1 -iname "*.$ext" -print0 | xargs -0 -r -n1 DOSOMETHINGHERE
# or # find . -maxdepth 1 -iname "*.$ext" -exec "ls" "-l" "{}" ";"
fi
done
PS -print0 | tr -d -c "\000" | wc -c
สามารถถูกแทนที่ด้วยหรือแม้กระทั่ง-printf "\000" | wc -c
-printf '\n' | wc -l