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

Скажем, у меня есть каталог /hello .

Тогда я делаю mv /hello /hello2 .

Я перемещаюсь /hello в /hello2/hello ? Или я перемещаюсь /hello в /hello2 ?

Кажется, что, когда я делаю что-то подобное, я получаю несогласованные результаты.

  • Массовое переименование, изменение суффикса?
  • слэш (/) после имени каталога в командах оболочки
  • Использование переименования в терминале для удаления непринятых символов Windows
  • Добавить расширение файла в файлы, которые не имеют расширения
  • Создать новое имя для перемещенного файла, чтобы предотвратить перезапись?
  • Резервный файл с расширением .bak _before_ filename
  • Переименовать определенные файлы с частью имени родительского каталога
  • mv не удалось на полпути - исходный каталог неповрежден
  • 3 Solutions collect form web for “Как решить, что mv перемещается в каталог, а не заменяет каталог?”

    mv ab пытается переместить a в b если b является каталогом или символической ссылкой на каталог. В противном случае он переименует (или скопирует и удалит, если в разных файловых системах) a b .

    Чтобы получить согласованный результат для перемещения файла в каталог, вы можете:

     mv file dir/ 

    или

     mv file dir/. 

    Если dir не существует, вы получите сообщение об ошибке, и он не переименует file в file .

    Если, с другой стороны, вы хотите rename не беспокоясь о том, существует ли целевой файл в качестве каталога или нет, с помощью GNU mv вы можете:

     mv -T file dest 

    В этом случае file не будет перемещен в dest если dest является каталогом. Однако, если оба file и dest являются каталогами, а dest пуст, file будет переименован в dest (и исходный dest удален). Если оба каталога и dest не являются пустыми, mv -T будет жаловаться.

    То же самое, если file и dest не являются каталогами (и которые включают символические ссылки, включая символические ссылки в каталоги), file будет переименован в dest (хотя вы получите приглашение, если у вас нет разрешения на запись для dest ), а исходный dest будет удалить. Есть разница с mv file dest в случае, когда dest является символической ссылкой на каталог. С -T file переименовывается в dest , но без -T , file перемещается в каталог, на который указывает dest .

    Итак, чтобы подвести итог, после mv -T file dest , либо file будет переименован в dest либо вы получите сообщение об ошибке (или подсказку). Если команда выполнена успешно, исходный dest , если он существовал заранее, будет удален.

    Это полностью зависит от того, существует ли уже существующая директория с именем '/ hello2' или нет.

    Если / hello2 существует AND является каталогом, тогда перемещение всегда будет перемещаться / hello в / hello / hello2

    Если / hello2 не существует, то move всегда будет переименовывать / hello в / hello2

    Если / hello2 существует AND является файлом, вы получите сообщение об ошибке: «Нельзя перезаписывать не-каталог« hello2 »с помощью каталога« hello ».

    Я пробовал эти

     mkdir test1 mv -v test1 test2 output:`test1' -> `test2' mkdir test1 mv -v test2 test1 output: `test2' -> `test1/test2' touch test2 output:mv: cannot overwrite non-directory `test2' with directory `test1' 

    надеюсь, это все объясняет. -v – это подробный режим.

    Interesting Posts

    Как установить доменное имя в Crunchbang GNU / Linux?

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

    Добавить реальную мертвую зону в Synaptics Touchpad Driver

    Раскладка клавиатуры не изменяется в Chromium под Debian

    Линукс получил какую-то инфраструктуру мониторинга или оповещения в себе

    Если количество строк в строке csv больше, чем x, то удалите второй экземпляр

    Правильный способ распространения сценариев оболочки

    Как установить беспроводной маршрутизатор Realtek RTL8723BE на debian?

    Почему startx зависает, если у меня нет подключения к Интернету в OpenBSD

    Как заставить `command-not-found` работать в Debian Stretch

    Команда прокси-сервера ssh bastion

    Маленький встроенный ssd в ноутбуке может установить Linux?

    Почему oh-my-zsh выбирает .zhistory вместо .zsh_history для значения HISTFILE?

    / proc / sys / kernel / hung_task_timeout_secs

    Почему использование `yes` на bash-конвейерах * не * вызывает бесконечные циклы?

    Linux и Unix - лучшая ОС в мире.