Tập lệnh Linux đi vào tất cả các thư mục và thực hiện lệnh


0

Xin chào Tôi có một số thư mục trong thư mục của tôi. Tôi muốn thực hiện lệnh này trong tất cả chúng:

wc -l *> tổng

Có một cách mà một kịch bản có thể làm điều này?


Các thư mục con của chúng cũng vậy và bạn có muốn chạy lệnh đó trong các thư mục con không nếu chúng tồn tại?
Eric Renouf

Sử dụng điều này như một điểm khởi đầu. find . -type d -print | while read dn; do (cd $dn; echo "command in $dn"); doneTôi đoán bạn sẽ làm thế nào để nối đầu ra cho mỗi thư mục vào tệp văn bản.
Chạy CMD

Câu trả lời:


2

Đúng:

find /YOUR/ROOT/DIR -type f -exec wc -l '{}' \; > total

Nếu bạn cần một totaltệp cho mỗi thư mục (phụ), thì bạn sẽ cần phải lặp cuộc gọi này:

find /YOUR/ROOT/DIR -type d | while read
do
   # Change '/' to '_' in dir name
   NAME=$(echo "$REPLY" | sed -e 's#/#_#g')
   wc -l "$REPLY" > "total.$NAME"
done

Hy vọng nó giúp.


Không nên đọc dòng đầu tiên "-type d"?
davidgo

1
Tôi nghĩ rằng không có. Câu hỏi muốn chạy wc -l *trong mọi thư mục có nghĩa là chạy wc -lcho mọi tệp trong mọi thư mục. Vì vậy, câu trả lời này tìm thấy tất cả các tệp và chạy wc -lcho tất cả chúng tôi đoán
Esref

3
Dòng đầu tiên tìm thấy tất cả các tệp đệ quy trên tất cả các thư mục con, lưu kết quả của wcchỉ một totaltệp. Khối mã khác là để có một totaltệp cho mỗi thư mục con.
emi
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.