Я выполнял команду diff --brief -r /home/mateusz/ /media/mateusz/Database/backup_test_tmp_folder/home/mateusz/
, которая завершилась с кодом ошибки 2. Согласно документации «Состояние выхода равно 0, если входы одинаковы, 1, если отличается, 2, если проблема.»
К сожалению, команда вышла без давая понять, почему это не удалось. Я пытался использовать straces, но, к сожалению, я не могу ничего диагностировать на основе созданного журнала (последние 150 строк файла strace размером 3,5 ГБ размещены в https://gist.github.com/matkoniecz/15ed855bd3f161ad6354c7d637234804 - а также для сравнения с sudo
, который потерпел неудачу после создания 78KB страничного журнала).
Я подумал об изменении команды diff для вывода некоторого объяснения перед смертью и возвратом 2, но, учитывая, что маловероятно, что моя программа уникальна, отсутствие поддержки такой отладки, кажется, указывает на то, что есть лучшие решения (надеюсь, это не как интерпретировать strace ").
Так, как я должен проверить, почему моя команда diff провалилась? Есть ли лучший инструмент, чем strace или добавление отладки printf в команду diff?
Можно считать вывод. diff
не дает различные коды статуса выхода кроме:
(от разности человека)
"Проблема" означает, что не могла считать файл или в значительной степени что-либо еще.
От небольшого тестирования с помощью разности (GNU diffutils) 3.3 и сравнивая папки, diff
выводы обмениваются сообщениями к stdout или stderr:
Если один файл отсутствует затем, статус выхода равняется 1, и это появляется на stdout:
Only in folder1: file-a
Если один файл нечитабелен затем, статус выхода равняется 2, и это появляется на stderr:
diff: folder1/file-b: Permission denied
(Если обе ошибки происходят, статус выхода равняется 2.)
Обратите внимание, что разность продолжит обрабатывать дальнейшие файлы после обнаружения с "проблемой", таким образом, строка, сообщая о причине статуса выхода 2 сможет быть в любой части вывода.
Посмотрите этот GNU "diffutils руководство" ссылка для большего количества информации о сравнении каталогов (и использование разности в целом, это безумно более подробно, чем просто man diff
). Информация как:
... если Вы используете
--report-identical-files
(-s
) опция, это сообщает о парах идентичных файловЕсли только один файл существует, разность обычно не показывает свое содержание; это просто сообщает, что один файл существует, но другой не делает. Можно сделать различное действие, как будто недостающий файл пуст, так, чтобы это произвело все содержание файла, который на самом деле существует... использование
--new-file
(-N
)... Если более старый каталог содержит большие файлы, которые не находятся в более новом каталоге, можно сделать патч меньшим при помощи--unidirectional-new-file
опция вместо-N
.Для игнорирования некоторых файлов при сравнении каталогов используйте
--exclude=pattern
(-x pattern
) опцияЕсли Вы сравнивали два каталога и остановились отчасти через, позже Вы могли бы хотеть продолжить, где Вы кончили. Можно сделать это при помощи
--starting-file=file
(-S file
) опция. Это сравнивает только файл файла и все в алфавитном порядке более поздние файлы на уровне каталога самого верхнего уровня.
Или они связали Q от других сайтов:
mv
просто вызовыrename()
, тогда как, в то время какmv
- луг между файловыми системами, содержание сначала копируетсяread()
сwrite()
с, только после того, как они становятся успешными, файлunlink()
- редактор из исходного каталога. – heemayl 12 August 2017 в 02:51