Я перетаскиваю папку в другую по ошибке в FileZilla.
~/big_folder
~/some_other_folder
Перемещенная папка очень большая. Он включает в себя сотни тысяч файлов (node_modules, небольшие файлы изображений, много папок)
То, что так странно, - то, что после того, как я отпускаю свою мышь, движение закончено. Папка «big_folder» перемещена в «some_other_folder».
~/some_other_folder/big_folder
(нет big_folder
в ~/
после переезда)
Затем я осознаю ошибку и пытаюсь вернуться назад, но она не работает как на FileZilla, так и на терминале.
Затем я должен cp -r
скопировать файлы обратно, потому что есть серверные коды, обращающиеся к этим файлам в~/big_folder
И это требует, как вечно ждать ...
Что я должен делать?
Кстати, вот вывод из FileZilla (это ошибка возврата):
Status: Renaming '/root/big_folder' to '/root/some_other_folder/big_folder'
Status: /root/big_folder -> /root/some_other_folder/big_folder
Status: Renaming '/root/some_other_folder/big_folder' to '/root/big_folder'
Command: mv "big_folder" "/root/big_folder"
Error: mv /root/some_other_folder/big_folder /root/big_folder: received failure with description 'Failure'
received failure with description 'Failure'
.mv /root/some_other_folder/big_folder /root/big_folder
. Какое сообщение об ошибке вы получаете?cp -al
mv vs cp
Вопрос О.П. адресован, но мне бы хотелось услышать, почему он смог мгновенно переместить папку в одном направлении, но не в другом.Ответы:
Если каталог перемещается в пределах одной и той же файловой системы (того же раздела), то все, что нужно, это переименовать путь к файлу каталога. Никакие данные кроме записи каталога для самого каталога не должны быть изменены.
когда копировании каталогов данные для каждого файла должны дублироваться. Это включает в себя чтение всех исходных данных и запись их в место назначения.
Перемещение каталога между файловыми системами потребует копирования данных в место назначения и удаления их из источника. Это займет примерно столько же времени, сколько и копирование (дублирование) данных в одной файловой системе.
Если FileZilla успешно переименовал каталог из
~/big_folder
в~/some_other_folder/big_folder
, то я бы восстановил это, используя... после того, убедившись в том , что не были директории
~/big_folder
(если есть, этот шаг положитbig_folder
изsome_other_folder
в~/big_folder
каталог в качестве вложенной папки).источник
mv ~/some_other_folder/big_folder ~/
убедившись, чтоbig_folder
в домашнем каталоге нет других . Я никогда не использовал FileZilla.Существующий ответ великолепен, но я бы хотел немного расширить его, показывая, что именно происходит, когда вы двигаетесь, а не когда копируете файл. Когда вы смотрите на системные вызовы во время копирования, вы видите:
Это открывает исходный файл, а затем создает второй файл. Затем он считывает содержимое исходного файла в память и записывает эту память в целевой файл. Это требует нескольких переключателей контекста и некоторого дискового ввода-вывода, который может быть довольно высоким для больших файлов. Однако, если вы переместите файл, вы увидите:
Важно помнить, что файл будет переименован только в том случае, если он находится в том же разделе на том же физическом диске. Если вы создадите огромный файл размером в несколько гигабайт, а затем переместите его в другое место в своем доме, вы заметите, что действие завершается немедленно. Если, с другой стороны, вы перенесете его на внешнее устройство, его перемещение займет столько же времени, сколько и при использовании
cp
. Это связано с тем, что перемещение файла можно выполнить, только переименовав его, если он находится в том же разделе.источник
getdents()
иmkdir()
вызовы, разбросанные вокруг.