Puncte:0

scriptul bash pentru a parcurge folderele și fișierele

drapel ps

Am foldere care numesc ouput00035023031 până la output000035023035.Am scris scriptul bash pentru a itera prin fiecare folder și a intra în folder. După ce am intrat în folder vreau să rulez un program 'barycorr'. Care cere trei intrări. Intrările sunt nume de fișiere *cl.evt. Codul este suflat:

pentru i în $(seq -f "%03g" 1 5); do
    CD output0003502303$i
    echo -e "sw00092413002xpcw3po_cl.evt 
    sw00092413002xpcw3po_cl_bary4.evt 
    sw00092413002sao.fits.gz" | barycorr ra=253,467570 dec=39,760169
    cd ..
Terminat

Trebuie să introduc prima intrare numele fișierelor sw*pcw3po_cl.evt, în al doilea rând numele fișierului pe care vreau să îl salvez sw*xpcw3po_cl_bary4.evt iar al treilea calea unde sw*sao.fits.gz fișierul este localizat. The * se schimbă în funcție de folderul în care mă aflu. Cum să scriu acum scriptul pentru a rula acest program în fiecare folder.

drapel au
Va exista întotdeauna exact o potrivire pentru fiecare dintre aceste modele în fiecare folder? Adică, este posibil ca un folder să aibă `sw1pcw3po_cl.evt` și, de asemenea, `sw2pcw3po_cl.evt`?
unicorn avatar
drapel ps
Da, `sw00035023032xpcw3po_cl.evt` se modifică în funcție de numărul dosarului de ieșire, cum ar fi output00035023032 și, în afară de aceasta, ar putea exista numele de fișier `sw00035023032xwtw2po_cl.evt` se poate schimba i.e. pcw.
drapel au
Prima parte este întotdeauna aceeași cu numele folderului? Adică sunt fișierele `xpcw3po_cl.evt`, `xpcw3po_cl_bary4.evt` și `sao.fits.gz`? De asemenea, este cu adevărat necesar să „cd” în foldere sau ar funcționa pentru a trece căi (de exemplu, `/xpcw3po_cl.evt`) la comanda `barycorr`? (Motivul celei de-a doua întrebări este că `cd` din scripturi tinde să fie confuz și poate cauza erori de reacție în lanț, așa că prefer să le evit.)
unicorn avatar
drapel ps
Da, putem da cale. Putem face o listă cu această comandă schimbând valoarea numerică doar ca „00035023030” în „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` ` . dar dacă un număr este ratat, cum ar fi să spunem ..31 eroare, trebuie să-l ocolesc programul. de asemenea.
Puncte:0
drapel au

Dacă am înțeles bine, ar trebui să poți face ceva de genul acesta:

pentru i în $(seq -f "%03g" 1 5); do
    printf '%s\n' "output0003502303${i}/sw00092413${i}"{xpcw3po_cl.evt,xpcw3po_cl_bary4.evt,sao.fits.gz} |
        barycorr ra=253,467570 dec=39,760169
Terminat

Explicație: the printf „%s\n” va imprima fiecare dintre următoarele argumente (the %s parte) urmată de linii noi (the \n) -- adică fiecare pe o linie separată. printf este mult mai controlabil pentru astfel de lucruri decât ecou.

În ceea ce privește aceste argumente, fiecare constă din numele folderului și prefixele numelui de fișier, apoi din {xpcw3po_cl.evt,xpcw3po_cl_bary4.evt,sao.fits.gz} parte se extinde la fiecare dintre aceste sufixe. În esență, este o prescurtare pentru:

"output0003502303${i}/sw00092413${i}"xpcw3po_cl.evt
"output0003502303${i}/sw00092413${i}"xpcw3po_cl_bary4.evt
"output0003502303${i}/sw00092413${i}"sao.fits.gz

Acesta este ceea ce este necesar? Dacă nu, vă rugăm să clarificați.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.