Простой способ проверить, какие файлы отсутствуют

481
Baibro

У меня есть 2 жестких диска, я скопировал все с одного жесткого диска на новый диск, но некоторые файлы не копировались, поскольку они были повреждены. Есть ли простой способ проверить, какие файлы с одного жесткого диска не находятся на другом?

0
На мой взгляд, вы должны использовать `rsync`, и я думаю, что` rsync --update --list-only` должен помочь, но я не уверен. В любом случае, `rsync` делает потрясающую работу. Вы также можете посмотреть на [rsyncbackup.vbs] (http://www.heise.de/download/rsyncbackup.vbs.html), который некоторые профессионалы создали для свободного использования, поскольку проанализированные коммерческие решения не были удовлетворительными. Run CMD 8 лет назад 0
да, любое из программ синхронизации, которые имеют процедуры «сравнения», windiff (microsoft) - это действительно старая простая небольшая программа, которая сравнивает, первое сканирование занимает бесконечно, но, изучая, как ее использовать, можно повторно сканировать и копировать то, что отличается. неправильно. Не предназначен для массового копирования файлов, больше для синхронизации программных деталей и деталей в наборе подпапок папок, но он прекрасно работает, учитывая время, и проверяет каждый бит :-) файлов. Psycogeek 8 лет назад 0

2 ответа на вопрос

3
Yorik
robocopy sourcedriveletter: destinationdriveletter: /MIR /LOG:logfilename.txt /TEE /L 

Robocopy - это инструмент командной строки, встроенный в окна. Вы можете проверить параметры, открыв приглашение cmd (для этой цели, вероятно, как администратор, я полагаю) и набрав robocopy /?или, robocopy /? > %USERPROFILE%\desktop\robocopyoptions.txtесли вам нужна версия справочного документа в текстовом файле.

В моем примере выше /MIRозначает «зеркало», и оно дублирует «источник» в «месте назначения» и удаляет все в «месте назначения», кроме «источника».

/log:записывает в файл, /TEEвыводит на консоль, а также в файл журнала.

Последняя команда /Lустанавливает его только для списка и фактически не будет копировать или удалять файлы.

Журнал очень четко покажет вам, какие файлы в источнике не существуют в месте назначения.

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

Спасибо @Yorik, это сработало с точной командной строкой, которую вы поставили вверху, но я проверил на всякий случай, принял Baibro 8 лет назад 0
2
BramMooij

обратная связь от OP: метод Excel не работает для него, метод Matlab не проверен У меня есть очень не элегантное решение, но я думаю, что оно работает (при условии, что у вас есть Excel). Это работает только в том случае, если количество имен файлов соответствует Excel. (Excel имеет ограниченное максимальное количество строк: 1 048 576).

Перейти к cmd (я предполагаю, что вы находитесь на окнах). Смени каталог на первый диск. Тип:

dir /s/b/o:gn > drive1.txt 

Сделайте то же самое для второго диска, но измените имя txt-файла.

Я взял строку cmd с: https://stackoverflow.com/questions/3447503/how-to-get-a-list-of-sub-folders-and-their-files-ordered-by-folder-names .

Скопируйте оба вывода в Excel (при условии, что 2007 или новее). Самый простой вариант, о котором я знаю, это следующее:

  • Выберите столбцы, содержащие выходные данные cmd.
  • На вкладке данных в группе «Сортировка и фильтр» нажмите «Дополнительно».
  • В диалоговом окне «Расширенный фильтр» выполните одно из следующих действий:
    • Чтобы отфильтровать диапазон ячеек или таблицы на месте, нажмите «Фильтровать список» на месте.
    • Чтобы скопировать результаты фильтра в другое место, сделайте следующее:
      • Нажмите Скопировать в другое место.
      • В поле «Копировать в» введите ссылку на ячейку.
  • Либо нажмите Свернуть изображение кнопки диалога, чтобы временно скрыть диалоговое окно, выберите ячейку на листе и нажмите Развернуть изображение кнопки диалога.
  • Установите флажок «Только уникальные записи» и нажмите «ОК».
  • Уникальные значения из выбранного диапазона копируются в новое местоположение. Исходные данные не затрагиваются.

Таким образом, у вас должен быть список всех уникальных имен файлов, который совпадает со списком всех имен файлов, которые не были скопированы.

В конце концов, процедура Excel была взята по адресу : https://support.office.com/en-us/article/Filter-for-unique-values-or-remove-duplicate-values-d6549cf0-357a-4acf-9df5- ca507915b704 # bmfilter_for_unique_values

В качестве альтернативы вы можете использовать команду cmd в Matlab.

Команда в Matlab может быть:

DosCommand=sprintf('%s %s','dir / B',directory); [status, cmdout]=dos(DosCommand); end Filenames = strread(cmdout,'%s');  

Затем выполните:

NonCopiedFilenames =   A(sum(bsxfun(@eq, A(:), A(:).'))==1); 

Трюк с уникальными значениями был скопирован с: https://stackoverflow.com/questions/19236914/how-to-find-a-unique-value-in-a-matrix-by-using-matlab

Если у вас нет Excel, есть [бесплатные альтернативы] (http://www.openoffice.org/) Burgi 8 лет назад 1
@BramMooij Извините, метод Excel не работает, у меня есть тысячи строк файлов, и он каждый раз вылетает Excel, даже когда мой хороший компьютер работает в режиме реального времени. Baibro 8 лет назад 0
Очень плохо. Это число превышает 1 048 576? В этом случае это имеет некоторый смысл, так как это предел количества строк в Excel. В любом случае я добавлю это ограничение к предложенному ответу. Рад, что вы нашли другое решение, хотя. BramMooij 8 лет назад 0

Похожие вопросы