Tôi muốn biết có bao nhiêu tệp thông thường có phần mở rộng .c
trong một cấu trúc thư mục phức tạp lớn và cũng có bao nhiêu thư mục mà các tệp này được trải rộng. Đầu ra tôi muốn chỉ là hai số đó.
Tôi đã thấy câu hỏi này về cách lấy số lượng tệp, nhưng tôi cần biết số lượng thư mục của các tệp.
- Tên tệp của tôi (bao gồm các thư mục) có thể có bất kỳ ký tự nào; họ có thể bắt đầu bằng
.
hoặc-
có không gian hoặc dòng mới. - Tôi có thể có một số liên kết tượng trưng có tên kết thúc
.c
và liên kết tượng trưng đến thư mục. Tôi không muốn các liên kết tượng trưng được theo dõi hoặc đếm, hoặc ít nhất tôi muốn biết nếu chúng được tính khi nào và khi nào chúng được tính. - Cấu trúc thư mục có nhiều cấp độ và thư mục cấp cao nhất (thư mục làm việc) có ít nhất một
.c
tệp trong đó.
Tôi vội vàng viết một số lệnh trong shell (Bash) để tự đếm chúng, nhưng tôi không nghĩ kết quả này là chính xác ...
shopt -s dotglob
shopt -s globstar
mkdir out
for d in **/; do
find "$d" -maxdepth 1 -type f -name "*.c" >> out/$(basename "$d")
done
ls -1Aq out | wc -l
cat out/* | wc -l
Điều này đưa ra các khiếu nại về chuyển hướng mơ hồ, bỏ lỡ các tệp trong thư mục hiện tại và gặp các ký tự đặc biệt (ví dụ: đầu ra được chuyển hướng find
in các dòng mới trong tên tệp ) và ghi cả đống tệp trống (rất tiếc).
Làm thế nào tôi có thể liệt kê đáng tin cậy các .c
tập tin của tôi và các thư mục chứa chúng?
Trong trường hợp có ích, đây là một số lệnh để tạo cấu trúc thử nghiệm với tên xấu và liên kết tượng trưng:
mkdir -p cfiles/{1..3}/{a..b} && cd cfiles
mkdir space\ d
touch -- i.c -.c bad\ .c 'terrible
.c' not-c .hidden.c
for d in space\ d 1 2 2/{a..b} 3/b; do cp -t "$d" -- *.c; done
ln -s 2 dirlink
ln -s 3/b/i.c filelink.c
Trong cấu trúc kết quả, 7 thư mục chứa .c
các tệp và 29 tệp thông thường kết thúc bằng .c
(nếu dotglob
tắt khi các lệnh được chạy) (nếu tôi bị sai, xin vui lòng cho tôi biết). Đây là những con số tôi muốn.
Xin vui lòng không sử dụng thử nghiệm đặc biệt này.
NB: Câu trả lời trong bất kỳ shell hoặc ngôn ngữ khác sẽ được kiểm tra và đánh giá cao bởi tôi. Nếu tôi phải cài đặt gói mới, không có vấn đề. Nếu bạn biết một giải pháp GUI, tôi khuyến khích bạn chia sẻ (nhưng tôi có thể không đi xa đến mức cài đặt toàn bộ DE để kiểm tra nó) :) Tôi sử dụng Ubuntu MATE 17.10.