Bất cứ điều gì liên quan lsđều có khả năng tạo ra kết quả bất ngờ với ký tự đặc biệt (không gian và các biểu tượng khác). Bất kỳ bashism (như mảng) không thể di động. Bất cứ điều gì liên quan while readthường là chậm.
Mặt khác, findRẤT linh hoạt (rất nhiều tùy chọn để lọc), nó có [ít nhất] hai cú pháp không an toàn cho các ký tự đặc biệt ... và nó có tỷ lệ tốt trên thư mục lớn.
Trong ví dụ này, tôi đã sử dụng -inameđể khớp cả tên mở rộng chữ hoa và chữ thường. Tôi cũng đã hạn chế việc -maxdepth 1tôn trọng "trong thư mục hiện tại" của bạn. Thay vì đếm số lượng dòng, trong đó tên tệp có thể bao gồm CR / LF, -print0sẽ in một byte NULL ở cuối mỗi tên tệp ... vì vậy, | tr -d -c "\000" | wc -lviệc đếm chính xác các tệp (byte 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 -ccó thể được thay thế bằng -printf "\000" | wc -choặc thậm chí -printf '\n' | wc -l.