Вообще говоря, я начинаю паниковать, когда осознаю, что если я отменю перемещение файла, это может привести к тому, что цель или источник будут неполными. Этот вопрос касается платформ Windows и Unix. Я никогда не помню точно, как работает команда перемещения в любом случае. Например, если вы перемещаете каталог; копирует ли он весь каталог, а затем удаляет его или копирует, а затем удаляет каждый файл по отдельности?
Я всегда понимаю, после ввода чего-то подобного mv verybigdir dest
, что я, возможно, должен был набрать cp -R verybigdir dest && rm -R verybigdir
(где &&
оператор переходит к следующей команде, только если первая была успешной) - или это бессмысленно? Что именно происходит, когда я нажимаю Ctrl+ на Cполовине хода? Аналогично, что именно происходит в Windows, когда я нажимаю кнопку отмены?
Я не могу сосчитать, сколько раз я что-то перемещал (последний раз был при использовании svn
) и имел две директории с разделенным содержимым. Я думаю, что ответ сложный, потому что не все приложения перемещают группы файлов одинаково.
источник
Ответы:
В Windows переход на один и тот же диск и раздел будет действовать так же, как команда mv в Unix, и переименовывает папку или меняет ее родителя. Однако, если бы вы переместили его на другой драйвер или раздел, он бы копировал и удалял файл за файлом, поэтому более эффективно использовать tar-файл или zip-файл без сжатия для более быстрого перемещения файлов между разделами и жесткими дисками. , Если бы вы отменили его, он просто остановился бы там, где он есть. Я полагаю, что то же самое верно для Unix, но я недостаточно экспериментировал с этим, чтобы быть на 100% уверенным. Это просто вопрос изменения inode, но если он находится на другом разделе или диске, его необходимо скопировать в сектора этого раздела или диска. Если бы вы отменили его во время передачи, он уже переместил бы некоторые файлы, и файл, который был передан, увидит его ».
Обновление: если вы хотите отменить перемещение и хотите возобновить его, просто переиздайте ордер на перемещение. Он может предупредить вас о том, что папка назначения уже существует, но файлы не будут перезаписаны (если они не существовали до первоначального перемещения или не были добавлены в промежутке между двумя порядками перемещения), поскольку после их переноса они удаляются из источник (если находится на другом разделе или диске).
источник
Даже на абсолютно стабильном компьютере, который никогда не выходит из строя: если вам нужны временные метки, то
mv
это лучше, чем простоcp
.(
cp -a
сохранит временные метки для вас, и я предполагаю, что нечто подобное существует в Windows).источник
Нет.
Объяснение:
переименовывает Verybigdir в Dest. Это атомарная операция, т.е. не может провалиться на полпути.
Если dest находится на другом устройстве, mv сначала скопирует, а затем удалит старую версию. Это не атомарная операция. Если это не удастся, у вас может быть только частичная копия verybigdir в dest, но verybigdir все равно будет готов.
Да, другие приложения могут перемещать файлы по-другому.
источник
mv verybigdir/* dest
.mv verybigdir/* dest
разбивает mv of Verybigdir на множество отдельных операций перемещения. Всегда помните, что в отличие от Windows, программа / инструмент Linux не видит, что там "*", она расширяется оболочкой.На окнах я всегда копирую и удаляю вместо перемещения. Я когда-то перемещал файлы, и именно здесь я впервые заметил плохую карту памяти. При перемещении файла он остановился между ними, и я получил ошибку, поэтому я проверил исходную папку и файл исчез, затем я проверил место назначения и обнаружил поврежденный файл. Это случалось чаще с файлами большего размера, и большинство из них были загрузки, которые занимали часы, поэтому мы рекомендуем скопировать, а затем удалить. Сэкономьте время в начале, это окупится в конце.
источник
В unix при перемещениях, которые не пересекают границы файловой системы, данные
mv
не копируются: он просто обновляет базу данных inode в различных каталогах. Это намного быстрее чемcp
на больших файлах.Далее, используя
mv
границ файловой системы просто вызывает механизм копирования и удаления.Поэтому я думаю, что вы должны предпочесть
mv
.источник
По крайней мере, в Windows перемещение - это просто более автоматизированное копирование и удаление. Я полагаю, что mv перемещает каждый файл по отдельности, а это означает, что ^ c-ing не потеряет ни одного файла, вы просто получите файлы, разделенные на две части - в отличие от Проводника Windows, который при перемещении отменяет все операции.
Мое решение этого: никогда не двигаться, если я не уверен, что хочу переместить это.
источник
Если вы используете ACL в исходной файловой системе, но не в месте назначения, mv в Linux скопирует источник и затем - из-за невозможности установить ACL в месте назначения - остановится. Таким образом, вы получите файл с обеих сторон. В mv нет переключателя для предотвращения такого поведения, поэтому в этом случае cp && rm предпочтительнее.
источник