Shell – Renaming the current directory from a shell – possible

renameshell

Is it possible to rename the current working directory from within a shell (Bash in my particular case)? If I attempt to do this the straightforward way, I end up with an error:

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

Is there another way to do this without changing the current directory? I realize that I can easily accomplish this by changing to the parent directory, but I'm curious if this is necessary. After all, if I rename the directory from another shell, I can still create files in the original shell afterwards.

Best Answer

Yes, but you have to refer to the directory by name, not by using the . notation. You can use a relative path, it just has to end with something other than . or ..:

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

You can use an absolute path:

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

Similarly, rmdir . won't ever work, but rmdir "$PWD" does.

Related Question