Как переименовать каталог через командную строку?

564

У меня есть каталог, /home/user/oldnameи я хочу переименовать его в /home/user/newname. Как я могу сделать это в терминале?

Н.Н.
источник
Смотрите также: Как переместить каталог
kenorb
Используйте всегда mvили rename.
Джон Струд

Ответы:

737
mv /home/user/oldname /home/user/newname
Рафал Цеслак
источник
Классная статья. В том-то и дело.
Rafał Cieślak
77
Это не будет работать, если новое имя уже является существующим каталогом. Вместо этого он переместит старый каталог в новый.
cxrodgers
9
Если имя каталога совпадает с заглавными буквами, вы получите No such file or directory. Чтобы избежать этого, сделайте что-нибудь подобное mv /home/user/Folder /home/user/temp; mv /home/user/temp/ /home/user/folder.
DUTGRIFF
9
@cxrodgers: pass --no-target-directory( -T) , чтобы не рассматривать newnameкак целевой каталог.
JFS
123

mv может сделать две работы.

  1. Он может перемещать файлы или каталоги
  2. Может переименовывать файлы или каталоги

Чтобы просто переименовать файл или каталог, введите это в Терминале:

mv old_name new_name 

с пробелом между старым и новым именами.

Чтобы переместить файл или каталог, введите это в Терминале.

mv file_name ~/Desktop 

это переместит файл на рабочий стол.

Если это каталог, который вы должны добавить -Rперед именем каталога:

mv -R directory_name ~/Desktop
Шади
источник
3
mvна Ubuntu из ядра GNU Coreutils. УДАЛЕНО у этого нет никакой -Rопции, и это не необходимо при перемещении каталога.
Ариэльф
-r даже не работает
user1735921
Правильный вариант есть -T. Смотрите ответ @ bmaupin за его поведение.
хронометрический
39
mv -T /home/user/oldname /home/user/newname

Это переименует каталог, если место назначения не существует или если оно существует, но оно пустое. В противном случае это даст вам ошибку.

Если вы сделаете это вместо этого:

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

Произойдет одно из двух:

  • Если /home/user/newnameне существует, он будет переименован /home/user/oldnameв/home/user/newname
  • Если /home/user/newnameсуществует, то он будет двигаться /home/user/oldnameв /home/user/newname, т.е./home/user/newname/oldname

Источник: Как решить, что mv перемещается в каталог, а не заменяет каталог?

bmaupin
источник
Не работает, если вы хотите использовать заглавную букву в имени каталога в нечувствительной к регистру файловой системе (вероятно, в MacOS). mv -T $PWD/analisys $PWD/Analisysвозвращается mv: '/Users/sixtykeys/Projects/murphy/tmp/analisys' and '/Users/sixtykeys/Projects/murphy/tmp/Analisys' are the same file. Я работал над этим, используя промежуточное имя (т.е. analisys_).
Базиликоде
Возможно, команда не была успешной из-за ограничений файловой системы, но, с другой стороны, она была успешной при интерпретации ваших намерений (переименование каталога, а не его перемещение) :)
bmaupin
ты пробовал это?
Махмуд С. Марвад
5

Если вы хотите переименовать каталог на своем уровне в файловой системе (например, вы находитесь в своем домашнем каталоге и хотите переименовать каталог, который также находится в вашем домашнем каталоге):

mv Directory ./NewNameDirectory
Мэтт П
источник
4

Эта gvfs-moveкоманда также переименует файлы и каталоги.

gvfs-move /home/user/oldname /home/user/newname
Авинаш Радж
источник
3

gvfs-rename также переименует каталоги. Это выдаст ошибку, если каталог с новым именем уже существует. Единственным ограничением является то, что вы не можете использовать путь с именем папки. Так

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

не сработает, но

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

будет работать. Не так полезно, как mv -T, но я прочитал в человеке, что он предназначен для сетевых операций.

thebunnyrules
источник