Làm thế nào để ls mà không cần đệ quy


19

Tôi đang cố gắng để một số tập tin với một mẫu trong một thư mục. Tôi chỉ muốn quét cấp đầu tiên không đệ quy.

Kịch bản của tôi:

for i in $(ls $INCOMINGDIR/*$BUSSINESSDATE*)
do
  echo $i;
done

Trên lệnh quét đệ quy. Làm thế nào có thể làm cho nó chỉ để quét thư mục cấp đầu tiên?


printf %s\\n "$INCOMINGDIR/"*"$BUSINESSDATE"*
mikeerv

Câu trả lời:


39

Đừng phân tích cú phápls . Đồng thời không sử dụng ALL_CAPS_VARS

for i in "$incoming_dir"/*"$business_date"*; do

Tương tác, lscó một -dtùy chọn ngăn chặn việc hạ xuống thành các thư mục con:

ls -d $INCOMINGDIR/*$BUSSINESSDATE*

Cảm ơn thông tin, tôi sẽ bắt đầu tạo các tệp với các dòng mới trong tên chỉ để làm phiền các sysadmin ngay bây giờ.
Petah

Đó là lý do tại sao sysadmin / lập trình viên thông minh sử dụng "${i}". Bạn không bao giờ biết những gì có thể được trong i.
Ricky Beam

@Petah: hoặc ai đó có ý định xấu có thể tạo một tệp có tên my_file.doc[newline]another_persons_file.docvà hy vọng rằng một số tập lệnh có thể cố gắng "rm" những gì nó thấy là 2 tên tệp ... liên kết của Glenn là phải đọc (trên mywiki.wooledge.org, mọi người nên đọc toàn bộ faq, và cả trang cạm bẫy)
Olivier Dulac

1
mát mẻ. tôi không biết tùy chọn -d!
dokaspar

Tuyệt quá! Điều này làm việc cho những điều đơn giản hơn quá. Chẳng hạn như liệt kê tất cả các tệp có tiền tố chấm:ls -d .*
Wassadamo

8

Không có lý do tại sao lệnh này nên được đệ quy. Nhưng nếu $INCOMINGDIR/*$BUSSINESSDATE*khớp với một thư mục thì nội dung của thư mục này được hiển thị thay vì chính thư mục đó. Nhưng sẽ không có đệ quy vượt quá mức này.

Sử dụng lệnh này để tránh hiệu ứng đó:

ls -d "$INCOMINGDIR/"*"$BUSSINESSDATE"*

for ... incác lệnh với lsđầu ra là rủi ro.

Nói chung findcó vẻ là một giải pháp tốt hơn hoặc

for i in "$INCOMINGDIR/"*"$BUSSINESSDATE"*
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.