2010-03-12 40 views
8

Tôi đang cố gắng lấy nội dung của thư mục bằng cách sử dụng tập lệnh shell.đọc nội dung của thư mục bằng cách sử dụng tập lệnh shell

kịch bản của tôi là:

for entry in `ls`; do 
    echo $entry 
done 

Tuy nhiên, thư mục hiện tại của tôi có chứa nhiều file với khoảng trắng trong tên của họ. Trong trường hợp đó, tập lệnh này không thành công.

Cách chính xác để lặp qua nội dung của một thư mục trong kịch bản lệnh shell là gì?

PS: Tôi sử dụng bash.

+0

câu hỏi rất có liên quan: http://stackoverflow.com/questions/2437452 – jrharshath

Trả lời

12
for entry in * 
do 
    echo "$entry" 
done 
+0

+1 cho đúng và nhanh hơn tôi! :-P – Buggabill

+0

Có lẽ bạn nên sử dụng 'để nhập trong *. *'? –

+0

@ Jonathan: Nếu bạn cần khớp các tệp bắt đầu bằng '.' thì bạn nên tắt tùy chọn' dotglob'. –

3

không phân tích nội dung thư mục bằng cách sử dụng ls trong vòng lặp for. bạn sẽ gặp phải những vấn đề không gian trắng. sử dụng mở rộng vỏ thay vì

for file in * 
    do 
     if [ -f "$file" ];then 
     echo "$file" 
     fi 
    done 
+0

đã cập nhật câu hỏi .. – jrharshath

+0

cú pháp bash. hãy thử nó và xem. nhớ các dấu ngoặc kép xung quanh các biến. Điều này sẽ bảo vệ không gian màu trắng. Chỉ cần không sử dụng 'ls' trong' for loop' – ghostdog74

Các vấn đề liên quan