После получения ответа Стивена Китта и обсуждения этой команды как потенциального решения:
sudo mv -i ~/my_data_on_60GB_partition/* /media/admin/my_data/
Я решил отложить его, пока не пойму, что происходит, этот ответ описывает то, что я узнал и в итоге сделал.
Я использую Gnu, mv
которая копирует файлы в целевой каталог, тогда, только если операция копирования прошла успешно, она удаляет оригинал.
Однако я хотел проверить, mv
выполняет ли эта последовательность по одному файлу за раз, если это правда, исходное содержимое папки было бы аккуратно разделено на две части, одна часть сместилась к месту назначения, а другая все еще осталась в источнике. И, возможно, во время копирования будет один файл, который будет прерван между двумя каталогами, и он, вероятно, будет поврежден.
Чтобы обнаружить файлы, которые были общими для двух каталогов, я запустил:
~% sudo diff -r --report-identical-files my_data_on_60GB_partition/. /media/admin/mydata/. | grep identical | wc -l
14237
Этот результат показал, что в исходных и целевых каталогах было 14 237 экземпляров одинаковых файлов, я подтвердил, проверив файлы вручную - да, в обоих каталогах было много одинаковых файлов. Это говорит о том, что только после mv
копирования больших наборов файлов выполняется удаление исходных файлов. Быстрый поиск в info
по mv
команде показал
mv
Сначала он [ ] использует тот же код, который использовался cp -a
для копирования запрошенных каталогов и файлов, а затем (при условии успешного завершения копирования) удаляет оригиналы. Если копирование не удалось, то часть, которая была скопирована в целевой раздел, удаляется.
Я не запускал команду, но подозреваю, что попытался запустить
sudo mv -i ~/my_data_on_60GB_partition/* /media/admin/my_data/
-i
Подсказка перед перезаписью вероятно бы вызвало более чем 14.000 раз.
Итак, чтобы узнать, сколько всего файлов во вновь созданном каталоге:
~% sudo find my_data_on_60GB_partition/ -type f -a -print | wc -l
14238
Итак, если в новом каталоге было в общей сложности 14238 обычных файлов и 14237 имели идентичные оригиналы обратно в источнике, это означает, что в новом каталоге был только один файл, который не имел соответствующего идентичного файла в исходном каталоге. Чтобы узнать, что это был за файл, я запустил rsync в направлении источника:
~% sudo rsync -av --dry-run my_data_on_60GB_partition/ /media/admin/my_data
sending incremental file list
./
Education_learning_reference/
Education_learning_reference/Business_Education/
Education_learning_reference/Business_Education/Business_education_media_files/
Education_learning_reference/Business_Education/Business_education_media_files/Jeff Hoffman - videos/
Education_learning_reference/Business_Education/Business_education_media_files/Jeff Hoffman - videos/Jeff and David F interview/
Education_learning_reference/Business_Education/Business_education_media_files/Jeff Hoffman - videos/Jeff and David F interview/018 business plans-identifying main KPIs.flv
sent 494,548 bytes received 1,881 bytes 330,952.67 bytes/sec
total size is 1,900,548,824 speedup is 3,828.44 (DRY RUN)
Быстрая проверка подтвердила, что это был неправильно сформированный файл, где файл существовал как в источнике, так и в месте назначения, файл назначения = 64 МБ, оригинал = 100 МБ. Этот файл и его иерархия каталогов все еще принадлежали пользователю root, и исходные разрешения для него еще не восстановлены.
Итак, в заключение:
- все файлы, которые
mv
никогда не были найдены, все еще вернулись на свои места (очевидно)
- все файлы, которые
mv
копировались полностью, все еще имели свои оригинальные копии в исходном каталоге
- файл, который был скопирован только частично, по-прежнему имел оригинал в исходном каталоге
Другими словами, все исходные файлы все еще не были повреждены, и в этом случае решением было просто удалить новый каталог!
Control-Z
(паузу), а неControl-C
. В этом случае вы сможете увидеть, какой файл был передан в то время, и узнать, какой файл был скопирован только частично. Затем вы можете спокойно решить, как поступить. (Использоватьkill -stop
для процессов не в tty).