Comment renommer un répertoire via la ligne de commande?

564

J'ai le répertoire /home/user/oldnameet je veux le renommer /home/user/newname. Comment puis-je faire cela dans un terminal?

NN
la source
Utilisez toujours mvou rename.
John Strood

Réponses:

737
mv /home/user/oldname /home/user/newname
Rafał Cieślak
la source
Article cool. C'est exactement le but.
Rafał Cieślak
77
Cela ne fonctionnera pas si le nouveau nom est déjà un répertoire existant. Au lieu de cela, il déplacera l'ancien répertoire dans le nouveau.
cxrodgers
9
Si le nom du répertoire est identique à la capitalisation, vous obtiendrez No such file or directory. Pour éviter cela, faites quelque chose comme mv /home/user/Folder /home/user/temp; mv /home/user/temp/ /home/user/folder.
DutGRIFF
9
@cxrodgers: pass --no-target-directory( -T) , pour éviter de traiter newnamecomme un répertoire cible.
JFS
123

mv peut faire deux emplois.

  1. Il peut déplacer des fichiers ou des répertoires
  2. Il peut renommer des fichiers ou des répertoires

Pour renommer un fichier ou un répertoire, tapez ceci dans Terminal:

mv old_name new_name 

avec un espace entre les anciens et les nouveaux noms.

Pour déplacer un fichier ou un répertoire, tapez ceci dans Terminal.

mv file_name ~/Desktop 

il déplacera le fichier sur le bureau.

Si est un répertoire, vous devez ajouter -Ravant le nom du répertoire:

mv -R directory_name ~/Desktop
Shadi
la source
3
mvsur Ubuntu provient de GNU coreutils. AFAICT n’a pas d’ -Roption, il n’est pas nécessaire lors du déplacement d’un répertoire.
arielf
-r ne fonctionne même pas
user1735921
La bonne option est -T. Voir la réponse de @ bmaupin pour son comportement.
chronométrique
39
mv -T /home/user/oldname /home/user/newname

Cela renommera le répertoire si la destination n'existe pas ou s'il existe mais qu'il est vide. Sinon, cela vous donnera une erreur.

Si vous faites cela à la place:

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

Une des deux choses va se passer:

  • Si /home/user/newnamen'existe pas, il sera renommé /home/user/oldnameen/home/user/newname
  • S'il /home/user/newnameexiste, il entrera /home/user/oldnamedans /home/user/newname, c'est à dire/home/user/newname/oldname

Source: Comment décider que mv se déplace dans un répertoire plutôt que de le remplacer?

bmaupin
la source
Ne fonctionne pas si vous souhaitez mettre le nom du répertoire en majuscule dans un système de fichiers ne respectant pas la casse (probablement sous MacOS). mv -T $PWD/analisys $PWD/Analisysretourne mv: '/Users/sixtykeys/Projects/murphy/tmp/analisys' and '/Users/sixtykeys/Projects/murphy/tmp/Analisys' are the same file. J'ai travaillé autour de cela en utilisant un nom intermédiaire (c'est-à-dire analisys_).
basilikode
La commande n'a peut-être pas abouti en raison des limitations du système de fichiers, mais d'un autre point de vue, elle a bien interprété vos intentions (renommer un répertoire, ne pas le déplacer) :)
bmaupin
avez-vous essayé cela?
Mahmoud S. Marwad
5

Si vous souhaitez renommer un répertoire de votre niveau dans le système de fichiers (par exemple, vous vous trouvez dans votre répertoire de base et souhaitez renommer un répertoire qui se trouve également dans votre répertoire de base):

mv Directory ./NewNameDirectory
Matt P
la source
4

Cette gvfs-movecommande renommera également les fichiers et les répertoires.

gvfs-move /home/user/oldname /home/user/newname
Avinash Raj
la source
3

gvfs-rename renommera également les répertoires. Il y aura une erreur si un répertoire avec le nouveau nom existe déjà. La seule limitation est que vous ne pouvez pas utiliser un chemin d'accès avec le nom du dossier. Alors

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

ne fonctionnera pas, mais

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

marchera. Pas aussi utile que mv -T mais j'ai lu dans l'homme qu'il était destiné aux opérations du réseau.

thebunnyrules
la source