Gi nytt navn til den nåværende katalogen fra et skall – mulig?

Er det mulig å gi nytt navn til den gjeldende arbeidskatalogen fra et skall (Bash i mitt spesielle tilfelle)? Hvis jeg prøver å gjøre dette på en grei måte, får jeg en feil:

 nathan@nathan-desktop:/tmp/test$ mv . test2 mv: cannot move ‘.’ to ‘test2’: Device or resource busy  

Er det en annen måte å gjøre dette uten å endre den nåværende katalogen? Jeg innser at jeg enkelt kan oppnå dette ved å bytte til foreldrekatalogen, men jeg er nysgjerrig på om dette er nødvendig. Når alt kommer til alt, hvis jeg omdøper katalogen fra et annet skall, kan jeg fortsatt lage filer i det opprinnelige skallet etterpå.

Svar

Ja, men du må referere til katalogen etter navn, ikke ved å bruke . -notasjon. Du kan bruke en relativ bane, den må bare slutte med noe annet enn . eller ..:

/tmp/test$ mv ../test ../test2 /tmp/test$ pwd /tmp/test /tmp/test$ pwd -P /tmp/test2 

Du kan bruke en absolutt bane:

/tmp/test$ cd -P . /tmp/test2$ mv "$PWD" "${PWD%/*}/test3" /tmp/test2$ 

Tilsvarende rmdir . vil aldri fungere, men rmdir "$PWD" fungerer ikke.

Kommentarer

  • Perfekt … akkurat svaret jeg håpet på.
  • Det grunnleggende problemet er at du ' ikke har lov til å fjerne eller gi nytt navn til den spesielle ". " og .. " navn.

Svar

Som i @Gilles svarer, men bruker avstivningsutvidelse for kortfattet:

 mv ../{test,test2}  

Svar

Og det kommer an på hvordan du definerer «å endre den nåværende katalogen ”.

/tmp/test$ (cd .. && mv test test2) /tmp/test$ pwd /tmp/test /tmp/test$ pwd -P /tmp/test2 

gyter en subshell og endrer gjeldende katalog i subshell, men lar det primære skallet være der det var.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *