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

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

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

¿Hay otra forma de hacer esto sin cambiar el directorio actual? Me doy cuenta de que puedo lograr esto fácilmente cambiando al directorio principal, pero tengo curiosidad por saber si 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.

Respuesta

Sí, pero debe referirse al directorio por nombre, no usando el . notación. Puedes usar una ruta relativa, solo tiene que terminar con algo que no sea . o ..:

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

Puede usar una ruta absoluta:

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

De manera similar, rmdir . nunca funcionará, pero rmdir "$PWD" sí.

Comentarios

  • Perfecto … exactamente la respuesta que esperaba.
  • El problema básico es que ' no puedes eliminar o cambiar el nombre de la ". " y .. " nombres.

Responder

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

 mv ../{test,test2}  

Respuesta

Y depende de cómo 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.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *