Cum pot obține mv (sau * wildcard) pentru a muta fișiere ascunse?
Sunt migratoare directorul meu acasă de la un sistem vechi cu unul nou, și tar-am facut conține totul, inclusiv fișierele ascunse de genul .bashrc. Cu toate acestea, atunci când am muta conținutul despachetat tar (care sunt în /tmp) spre noua mea casă director, fișierele ascunse nu copiați (mv /tmp/home/rcook/* /home/rcook/
). Cum pot obține mv pentru a le muta?
De fapt, cred că problema nu este cu mv, dar cu bash's expandarea. Dacă am face acest lucru:
mkdir a
mkdir b
touch a/.foo
touch a/bar
mv a/* b/
ls -a a/ b/
Am văzut asta:
a/:
. .. .foo
b/:
. .. bar
o/.foo
nu se mișcă. Deci cum pot obține * wildcard pentru a găsi fișiere ascunse?
Da, cred că aș putea să decomprima arhiva tar direct in directorul meu acasă, dar tar decomprimă în acasă/rcook/...
, și vreau să fiu sigur că am suprascrie noua .bashrc
, etc. cu cele vechi, de versiuni personalizate, și știind cum de a găsi și pentru a muta fișiere ascunse este un valoros calificare. Sugestii?
Unele răspunsuri sugera ceva de genul mv src/.* dest/
. Cu toate acestea, am incercat asta pe testul meu directoare și are erori. Incepand cu:
rcook$ ls -a a/ b/
a/:
. .. bar .foo
b/:
. ..
rcook$ mv a/.* b/
mv: cannot move 'a/.' to 'b/.': Device or resource busy
mv: cannot remove 'a/..': Is a directory
rcook$ ls -a a/ b/
a/:
. .. bar
b/:
. .. .foo
Ce fac gresit?
Puteți face acest lucru :
Puteți pune
în~/.bashrc` dacă vrei să fie implicit.
Vezi http://mywiki.wooledge.org/glob
O altă abordare pentru a copia fișierele dot:
Don't de a folosi modelul
..*
ca se potriveste..
(pointer la directorul părinte). Dacă există fișiere al căror nume începe cu două puncte (ceva
), de asemenea, utiliza modelul..?*
.În completări, ai erori, dar codul încă lucrat. Singurul lucru pentru a adăuga este că ai spus-o doar pentru a copia fișierele dot. Încercați:
Veți primi în continuare erori . și .. de intrări, ceea ce este bine. Dar mutarea ar trebui să reușească.
Dacă tu
ls-l
intr-un director, veți vedea.
și..
printre fișierele enumerate. Deci, cred cămv .* /dest
ia aceste indicii în considerare. Încercați:acest lucru va ignora acele curente și părinte dir indicii.
Veți obține o eroare dacă oricare dintre cele trei modele
*
,[^.]*
sau..?*` se potrivește nici un fișier, astfel încât ar trebui să includă doar cele care se potrivesc.Două soluții posibile care mă pot gândi. Primul este de a utiliza cp în loc cu recursiv opțiune, copierea directorul curent la destinație.
apoi, puteți elimina fișierele sursă în directorul curent
Alternativ, dacă știi fișierele sunt sanely nume (fără spații, metacaractere, caractere non-printabile), puteți face ceva de genul asta
Nu e't într-adevăr un astfel de lucru ca "ascunse" fișiere pe Linux. Fișierele care încep cu un punct sunt doar ascunse de fișier listări în mod implicit.
Pentru a copia fișiere chiar și cu un glob, trebuie să prefix fișier cu
.
cum ar fimv -u .* foo "și apoi".foo
va appearn cafoo/.foo
când s-a mutat.A-u opțiune va muta numai fișiere atunci când sursa este mai nou, sau destinație lipsește. Sau ai putea ignora erorile despre mutarea
.
și..
deoarece acestea sunt fișiere speciale și nu pot fi mutate, dar nu prins în.*
glob de coajă.Deci, avem:
și:
Mi-am luat o mare timp de găsirea unor soluții mai bune decât toate răspunsurile aici.
Apoi mi-am luat 30 de secunde pentru această comandă:
Apoi am găsit dragostea mea:
Notă: eu nu't chiar înțeleg argumentul
-T
. A făcut doar ceea ce am nevoie. Aici se spune:În cazul meu, am fost pur și simplu încercarea de a
mv
un singur fișier ascuns și asta a fost soluția:FILE=.myHiddenFile mv "$FILE" dest/
Explicație
La început am încercat:
mv .myHiddenFile dest/
Dar ea a continuat să producă eroarea:
mv: nu se poate de stat '.myHiddenFile': Nu există un astfel de fișier sau director
Chiar dacă o
e -al
a arătat că fișierul șidest/
a existat.Motivul pare a fi faptul că shell a fost interpretarea "." în numele de fișier, astfel încât, prin mutarea la o variabilă se evită interpretarea. Probabil că există și alte modalități de a rezolva acest lucru, dar acest lucru a fost suficient pentru noi.
Dacă doriți să copiați fișierele, inclusiv fișierele ascunse de la directorul curent în care vă aflați.