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.