De huidige directory hernoemen vanuit een shell – mogelijk?

Is het mogelijk om de huidige werkdirectory te hernoemen vanuit een shell (Bash in mijn specifieke geval)? Als ik dit op een eenvoudige manier probeer te doen, krijg ik een foutmelding:

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

Is er een andere manier om dit te doen zonder de huidige directory te wijzigen? Ik realiseer me dat ik dit gemakkelijk kan bereiken door naar de bovenliggende map te gaan, maar ik ben benieuwd of dit nodig is. Immers, als ik de map hernoem vanuit een andere shell, kan ik daarna nog steeds bestanden in de originele shell maken.

Antwoord

Ja, maar je moet naar de directory verwijzen op naam, niet met de . -notatie. Je kunt een relatief pad gebruiken, het moet gewoon eindigen met iets anders dan . of ..:

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

U kunt een absoluut pad gebruiken:

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

Evenzo rmdir . zal” nooit werken, maar rmdir "$PWD" wel.

Reacties

  • Perfect … precies het antwoord waar ik op hoopte.
  • Het fundamentele probleem is dat het ' niet is toegestaan om de speciale ". " en .. " namen.

Antwoord

Zoals in @Gilles antwoord, maar accolade-uitbreiding gebruiken voor beknoptheid:

 mv ../{test,test2}  

Answer

En het hangt ervan af hoe u definieert “de huidige directory wijzigen ”.

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

spawnt een subshell en verandert de huidige directory in de subshell, maar laat je primaire shell waar hij was.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *