Sử dụng find . -print0
dường như là cách an toàn duy nhất để có được danh sách các tệp trong bash do khả năng tên tệp chứa khoảng trắng, dòng mới, dấu ngoặc kép, v.v.
Tuy nhiên, tôi đang gặp khó khăn trong việc thực sự làm cho đầu ra của find hữu ích trong bash hoặc với các tiện ích dòng lệnh khác. Cách duy nhất tôi đã quản lý để sử dụng đầu ra là chuyển nó thành perl và thay đổi IFS của perl thành null:
find . -print0 | perl -e '$/="\0"; @files=<>; print $#files;'
Ví dụ này in số lượng tệp được tìm thấy, tránh nguy cơ dòng mới trong tên tệp làm hỏng số lượng, như sẽ xảy ra với:
find . | wc -l
Vì hầu hết các chương trình dòng lệnh không hỗ trợ đầu vào được phân tách bằng null, tôi nghĩ điều tốt nhất là nắm bắt đầu ra của find . -print0
một mảng bash, giống như tôi đã thực hiện trong đoạn mã perl ở trên, sau đó tiếp tục với tác vụ, bất cứ điều gì có thể là.
Tôi có thể làm cái này như thế nào?
Điều này không hoạt động:
find . -print0 | ( IFS=$'\0' ; array=( $( cat ) ) ; echo ${#array[@]} )
Một câu hỏi tổng quát hơn có thể là: Làm cách nào tôi có thể làm những việc hữu ích với danh sách tệp trong bash?