Puncte:8

eroare când încercați să mv un fișier cu -r în numele fișierului

drapel in

Iata problema mea:

Am un fișier cu -r în nume: -r.jpg

Când am încercat să fac o mv *.jpg vechi/ Eu iau:

mv: opțiune nevalidă -- 'r'

Chiar si pentru

pentru g în *.jpg;do echo $g &&mv „${g}” vechi/;gata

Am aceeasi eroare.

paladin avatar
drapel id
Utilizați `mv -- *.jpg vechi/`, `--` dezactivează toți „parametrii” suplimentari după `--`.
drapel pl
Este un lucru bun că nu ați încercat să `rm` un fișier care include `-rf`...
Puncte:16
drapel kz

Cele mai multe utilități de linie de comandă au o prevedere de separat Opțiuni din argumente.

Asta previne o multitudine de probleme cu "special" nume de fișiere care arată ca opțiuni.

Cea mai comună indicație de separare a sfârșitului opțiunilor este două cratime -- sau -- care este susţinut şi de mv.

Cu alte cuvinte:

 mv [OPȚIUNI] -- SOURCE DEST

sau pentru că nu ai specificat nicio opțiune:

 mv -- *.jpg vechi/
Puncte:2
drapel cn

Cea mai simplă soluție ar fi să adăugați numele fișierului înaintea ./ descriind calea relativă

pentru g în *.jpg; face eco $g && mv „./${g}” vechi/; Terminat

De asemenea, este posibil să utilizați calea absolută

pentru g în $(pwd)/*.jpg; face eco $g && mv $g vechi/; Terminat

Alternativ, poate doriți să utilizați găsi comandă deoarece oferă deja calea relativă (puteți folosi comanda --adancime maxima dacă doriți să procesați numai directorul curent)

pentru g în $(găsește . -nume „*jpg”); do mv $g vechi; Terminat

Și în cel mai rău caz, în care aveți multe caractere complexe, care nu pot fi analizate, vă puteți referi la numerele inodelor combinate cu găsi -inum și procesează fișierele în consecință

 $ pentru g în $(ls -i1 ./*jpg | cut -f1 -d' '); gasesti. -inum $g -print0 | xargs -0 -I '{}' mv '{}' vechi; Terminat
drapel in
folosirea „./” este un indiciu inteligent; iar indiciu inum o soluție foarte bună :)
iBug avatar
drapel um
Literal, nu există caractere „neparsabile”: tot ce trebuie să faceți este să citați corect variabilele. În cele mai multe cazuri, o pereche de ghilimele duble sunt suficiente.
Peter Cordes avatar
drapel ke
`mv ./*.jpg vechi/` ar funcționa; nu trebuie să buclați câte un fișier odată.
Peter Cordes avatar
drapel ke
@Bussiere: Hack-ul `find -inum` nu este deosebit de util decât dacă doriți să găsiți linkuri dure. `găsește. -maxdepth 1 -name '*.jpg' -print0 | xargs -0 mv -t old/` sau ceva de genul acesta va face același lucru și, în cele din urmă, va rula `mv -t old ./-r.jpg`, ca această comandă. (Eventual cu mai multe alte nume de fișiere pe aceeași linie de comandă). Pur și simplu pierde mult timp pornind de la `find` pentru a scana întregul subarboresc pentru fișiere cu acel număr de inod pentru fiecare fișier de intrare, apoi imprimând numele fișierului. *nu* rulează `mv` pe numărul inodului; Apelurile de sistem Unix nu pot face asta.
Peter Cordes avatar
drapel ke
@Bussiere: Lucrul cheie care îl face să funcționeze (`./*.jpg` în loc de `*.jpg`) este deja folosit pe linia de comandă `ls` pentru a evita rularea `ls -r.jpg`, restul este doar efort irosit. Nu pot imagina un caz în care căutarea unui număr de inod este mai bine decât să folosești potrivirea numelui de fișier al lui find, cum ar fi `-iname` sau `-path`, și în mod ideal să folosești `-exec mv -t old/ {} +` pentru a evita chiar nevoie de xargs.

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.