¿Cómo cambio el nombre de un directorio a través de la línea de comando?

564

Tengo el directorio /home/user/oldnamey quiero cambiarle el nombre /home/user/newname. ¿Cómo puedo hacer esto en una terminal?

NN
fuente
Consulte también: Cómo mover un directorio
kenorb
Usar siempre mvo rename.
John Strood

Respuestas:

737
mv /home/user/oldname /home/user/newname
Rafał Cieślak
fuente
Artículo genial Ese es exactamente el punto.
Rafał Cieślak
77
Esto no funcionará si el nuevo nombre ya es un directorio existente. En cambio, moverá el directorio antiguo dentro del nuevo.
cxrodgers
99
Si el nombre del directorio es el mismo con mayúsculas, obtendrá No such file or directory. Para evitar esto haz algo como mv /home/user/Folder /home/user/temp; mv /home/user/temp/ /home/user/folder.
DutGRIFF
99
@cxrodgers: pass --no-target-directory( -T) , para evitar newnameser tratado como un directorio de destino.
jfs
123

mv puede hacer dos trabajos

  1. Puede mover archivos o directorios
  2. Puede renombrar archivos o directorios

Para cambiar el nombre de un archivo o directorio, escriba esto en Terminal:

mv old_name new_name 

con espacio entre los viejos y nuevos nombres.

Para mover un archivo o directorio escriba esto en Terminal.

mv file_name ~/Desktop 

moverá el archivo al escritorio.

Si es un directorio que debe agregar -Rantes del nombre del directorio:

mv -R directory_name ~/Desktop
Shadi
fuente
3
mven Ubuntu es de GNU coreutils. AFAICT no tiene una -Ropción, ni es necesario al mover un directorio.
arielf
-r ni siquiera funciona
user1735921
La opción correcta es -T. Vea la respuesta de @ bmaupin para su comportamiento.
cronométrico
39
mv -T /home/user/oldname /home/user/newname

Eso cambiará el nombre del directorio si el destino no existe o si existe pero está vacío. De lo contrario, le dará un error.

Si haces esto en su lugar:

mv /home/user/oldname /home/user/newname

Sucederá una de dos cosas:

  • Si /home/user/newnameno existe, cambiará el nombre /home/user/oldnamea/home/user/newname
  • Si /home/user/newnameexiste, se moverá /home/user/oldnamea /home/user/newname, es decir/home/user/newname/oldname

Fuente: ¿Cómo decidir que mv se mueve a un directorio en lugar de reemplazar el directorio?

bmaupin
fuente
No funciona si desea poner en mayúscula el nombre del directorio en un sistema de archivos que no distingue entre mayúsculas y minúsculas (probablemente en MacOS). mv -T $PWD/analisys $PWD/Analisysvuelve mv: '/Users/sixtykeys/Projects/murphy/tmp/analisys' and '/Users/sixtykeys/Projects/murphy/tmp/Analisys' are the same file. Trabajé alrededor de esto usando un nombre intermedio (es decir analisys_).
basilikode
El comando puede no haber sido exitoso debido a las limitaciones del sistema de archivos, pero desde otra perspectiva fue exitoso al interpretar sus intenciones (renombrar un directorio, no moverlo) :)
bmaupin
intentaste esto?
Mahmoud S. Marwad
5

Si desea cambiar el nombre de un directorio a su nivel en el sistema de archivos (por ejemplo, está en su directorio de inicio y desea cambiar el nombre de un directorio que también está en su directorio de inicio):

mv Directory ./NewNameDirectory
Matt P
fuente
4

Este gvfs-movecomando también cambiará el nombre de los archivos y directorios.

gvfs-move /home/user/oldname /home/user/newname
Avinash Raj
fuente
3

gvfs-rename también cambiará el nombre de los directorios. Dará un error si ya existe un directorio con el nuevo nombre. La única limitación es que no puede usar una ruta con el nombre de la carpeta. Entonces

gvfs-rename /home/boo /home/boo-the-dog 

no funcionará, pero

cd /home 
gvfs-rename boo boo-the-dog 

trabajará. No es tan útil como mv -T pero leí en el hombre que estaba destinado a operaciones de red.

thebunnyrules
fuente