Byta namn på den aktuella katalogen från ett skal – möjligt?

Är det möjligt att byta namn på den aktuella arbetskatalogen från ett skal (Bash i mitt speciella fall)? Om jag försöker göra det på ett enkelt sätt får jag ett fel:

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

Finns det ett annat sätt att göra detta utan att ändra den aktuella katalogen? Jag inser att jag enkelt kan åstadkomma detta genom att byta till överordnad katalog, men jag är nyfiken på om det är nödvändigt. När allt kommer omkring, om jag byter namn på katalogen från ett annat skal, kan jag fortfarande skapa filer i det ursprungliga skalet efteråt. p>

Svar

Ja, men du måste hänvisa till katalogen med namn, inte med . notation. Du kan använda en relativ sökväg, den måste bara sluta med något annat än . eller ..:

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

Du kan använda en absolut sökväg:

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

På samma sätt rmdir . kommer aldrig att fungera, men rmdir "$PWD" fungerar inte.

Kommentarer

  • Perfekt … exakt svaret jag hoppades på.
  • Grundfrågan är att du ' inte får ta bort eller byta namn på det speciella ". " och .. " namn.

Svar

Som i @Gilles svarar men använder stagutvidgning för korthet:

 mv ../{test,test2}  

Svar

Och det beror på hur du definierar ”ändra den aktuella katalogen ”.

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

skapar en subshell och ändrar den aktuella katalogen i subshell, men lämnar ditt primära skal där det var.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *