Puncte:0

Mutați imaginile într-un director separat după ce le citiți numele dintr-un fișier în bash

drapel us

Încerc să citesc numele imaginilor dintr-un text de fișier care este rgb_train_ids.txt, iar apoi voi muta imaginile după ce le citesc numele într-un folder nou care este Tren.

#!/bin/bash

pentru fișierul în $(cat rgb_train_ids.txt); do 
     mv „$file.png” „Tren”; 
Terminat

Când execut scriptul bash de mai sus, mută doar a doua imagine img_2 si arata asta:

mv: nu poate fi stat 'img_1'$'\r''.png': nu există un astfel de fișier sau director

Am observat că se mută întotdeauna ultima linie din textul fișierului.
Nu stiu unde este problema, ma puteti ajuta?

introduceți descrierea imaginii aici

Puncte:1
drapel hr

The $'\r' indică faptul că liniile din dvs rgb_train_ids.txt au terminații de linie în stil DOS, constând din secvența de 2 caractere CRLF. Linux se așteaptă ca fișierele să folosească doar LF. Puteți converti fișierul folosind dos2unix utilitar sau dezlipiți caracterele CR folosind tr sau sed de exemplu.

De asemenea, bucla peste linii folosind pentru fișierul în $(cat rgb_train_ids.txt) este o practică proastă - va eșua dacă liniile conțin spații albe sau alte caractere speciale pentru shell. Ar trebui să luați în considerare utilizarea unui in timp ce buclă în schimb:

în timp ce IFS= citește fișierul -r; do
  mv „$file.png” Tren/
terminat < <(tr -d '\r' < rgb_train_ids.txt)

Urmărirea / pe Tren/ este o măsură de siguranță care va provoca mv comandă pentru a eroa directorul if Tren nu există - în loc să redenumești neintenționat fiecare fișier. Alternativ ai putea folosi mv -t Tren „$file.png” să explicăm faptul că Tren este directorul țintă.

Vezi si

De asemenea, ați putea lua în considerare utilizarea xargs mai degrabă decât o buclă shell:

tr -d '\r' < rgb_train_ids.txt | xargs -d '\n' mv -t Tren
Abanoub Asaad avatar
drapel us
Vă mulțumesc mult, apreciez mult timpul și eforturile dvs.!

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.