Intereting Posts
Полное шифрование диска в Linux без initramfs переименование файлов путем добавления месяца и года, определенных в отметках времени файла Как узнать, откуда взялись записи resolv.conf? Реальное решение «лучше сенсорных инструментов» для выбора для копирования на Mac OS X Сжатие памяти с низким уровнем громкости VM git push не удался с удаленным: ошибка: hook отказался от обновления refs / heads / master Использование Linux Mint в качестве приложения Windows Вывод процесса `find` обрабатывает определенные поля Можно ли использовать один DHCP-сервер для передачи совершенно разных диапазонов IP-адресов на разные сетевые интерфейсы в разных локальных сетях? Различия между использованием swap методом и свободным или meminfo-обменом Как восстановить нормальный процесс загрузки после обновления pacman в EFI? Таблицы, удобные для командной строки почему гном 3 отстает во всех дистрибутивах? Как узнать, какой процесс написал конкретный журнал в dmesg? Systemd: Как заверить услугу «onehot», повторится, если она не срабатывает в первый раз?

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

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

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

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

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

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 – это подробный режим.