Điểm:0

bash script để lặp qua các thư mục và tệp

lá cờ ps

Tôi có các thư mục có tên ouput00035023031 thành output000035023035.Tôi đã viết tập lệnh bash để lặp qua từng thư mục và nhập thư mục. Sau khi vào thư mục, tôi muốn chạy chương trình 'barycorr'. Mà yêu cầu ba đầu vào. Đầu vào là tên tệp *cl.evt. Mã được thổi:

cho tôi bằng $(seq -f "%03g" 1 5); làm
    đầu ra cd0003502303$i
    tiếng vang -e "sw00092413002xpcw3po_cl.evt 
    sw00092413002xpcw3po_cl_bary4.evt 
    sw00092413002sao.fits.gz" | barycorr ra=253.467570 dec=39.760169
    đĩa CD ..
xong

Tôi cần nhập tên tệp đầu tiên sw*pcw3po_cl.evt, thứ hai là tên tệp tôi muốn lưu như sw*xpcw3po_cl_bary4.evt và thứ ba con đường nơi sw*sao.fits.gz tập tin được định vị. Các * thay đổi tùy theo thư mục tôi đang ở. Làm thế nào để viết tập lệnh bây giờ để chạy chương trình này bên trong từng thư mục.

lá cờ au
Sẽ luôn có chính xác một kết quả khớp với từng mẫu đó trong mỗi thư mục phải không? Nghĩa là, có thể một thư mục có `sw1pcw3po_cl.evt` và cả `sw2pcw3po_cl.evt` không?
unicorn avatar
lá cờ ps
Có, `sw00035023032xpcw3po_cl.evt` thay đổi theo số thư mục đầu ra như output00035023032 và tương ứng với điều này, có thể có tên tệp `sw00035023032xwtw2po_cl.evt` tức là pcw3 có thể thay đổi thành 'wtw2'.
lá cờ au
Là phần đầu tiên luôn luôn giống như tên thư mục? Đó là, là các tập tin `xpcw3po_cl.evt`, `xpcw3po_cl_bary4.evt` và `sao.fits.gz`? Ngoài ra, có thực sự cần thiết phải `cd` vào các thư mục hay nó có hoạt động để chuyển các đường dẫn (ví dụ: `/xpcw3po_cl.evt`) thành lệnh `barycorr`? (Lý do cho câu hỏi thứ hai là `cd` trong tập lệnh có xu hướng khó hiểu và có thể gây ra lỗi phản ứng dây chuyền, vì vậy tôi muốn tránh chúng hơn.)
unicorn avatar
lá cờ ps
Có, chúng tôi có thể cung cấp đường dẫn. Chúng ta có thể lập danh sách lệnh này bằng cách chỉ thay đổi giá trị số như `00035023030' thành '00035023035'. : ` echo -e "/home/dinesh/Test/output00035023030/sw00035023030xwtw2po_cl.evt /home/dinesh/Test/output00035023030/sw00035023030xwtw2po_cl_bary.evt /home/dinesh/Test/00035023030/auxil/sw00035023030sao.fits.gz" | barycorr ra=253.467570 dec=39.760169 ` . nhưng nếu bỏ sót một số như nói ..31 thì chương trình sẽ báo lỗi. Tôi cần bỏ qua lỗi quá.
Điểm:0
lá cờ au

Nếu tôi hiểu đúng, bạn sẽ có thể làm điều gì đó như thế này:

cho tôi bằng $(seq -f "%03g" 1 5); làm
    printf '%s\n' "output0003502303${i}/sw00092413${i}"{xpcw3po_cl.evt,xpcw3po_cl_bary4.evt,sao.fits.gz} |
        barycorr ra=253.467570 dec=39.760169
xong

Giải thích: các printf '%s\n' sẽ in từng đối số sau (các %S phần) theo sau là dòng mới (phần \N) -- nghĩa là, mỗi cái trên một dòng riêng biệt. bản inf dễ kiểm soát hơn đối với những thứ như thế này hơn là tiếng vang.

Đối với các đối số đó, mỗi đối số bao gồm tiền tố tên thư mục và tên tệp, sau đó là {xpcw3po_cl.evt,xpcw3po_cl_bary4.evt,sao.fits.gz} một phần mở rộng cho từng hậu tố đó. Về cơ bản, đó là cách viết tắt của:

"đầu ra0003502303${i}/sw00092413${i}"xpcw3po_cl.evt
"output0003502303${i}/sw00092413${i}"xpcw3po_cl_bary4.evt
"output0003502303${i}/sw00092413${i}"sao.fits.gz

Đây có phải là những gì cần thiết? Nếu không, xin vui lòng làm rõ.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.