Cambiar el nombre del directorio actual desde un shell: ¿es posible?

24

¿Es posible cambiar el nombre del directorio de trabajo actual desde un shell (Bash en mi caso particular)? Si intento hacer esto de manera directa, termino con un error:

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

¿Hay alguna otra manera de hacer esto sin cambiar el directorio actual? Me doy cuenta de que puedo lograr esto fácilmente al cambiar al directorio principal, pero tengo curiosidad si esto es necesario. Después de todo, si cambio el nombre del directorio desde otro shell, aún puedo crear archivos en el shell original después.

Nathan Osman
fuente

Respuestas:

41

Sí, pero debe referirse al directorio por su nombre, no utilizando la .notación. Puede usar una ruta relativa, solo tiene que terminar con algo diferente .o ..:

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

Puedes usar una ruta absoluta:

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

Del mismo modo, rmdir .nunca funcionará, pero lo rmdir "$PWD"hace.

Gilles 'SO- deja de ser malvado'
fuente
Perfecto ... exactamente la respuesta que esperaba.
Nathan Osman
55
El problema básico es que no está permitido eliminar o cambiar el nombre del "" especial. y ".." nombres.
Barmar
2

Como en la respuesta de @Gilles pero usando la expansión de llaves para brevedad:

mv ../{test,test2}
robstarbuck
fuente
1

Y depende de cómo se defina "cambiar el directorio actual".

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

genera una subshell y cambia el directorio actual en la subshell, pero deja su shell principal donde estaba.

G-Man dice 'restablecer a Monica'
fuente