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.