1

Я использую эту версию diff на моем Synology NAS для проверки резервной копии:

xyz> diff
BusyBox v1.16.1 (2014-05-29 11:26:15 CST) multi-call binary.

Usage: diff [-abBdiNqrTstw] [-L LABEL] [-S FILE] [-U LINES] FILE1 FILE2

Compare files line by line and output the differences between them.
This implementation supports unified diffs only.

Options:
        -a      Treat all files as text
        -b      Ignore changes in the amount of whitespace
        -B      Ignore changes whose lines are all blank
        -d      Try hard to find a smaller set of changes
        -i      Ignore case differences
        -L      Use LABEL instead of the filename in the unified header
        -N      Treat absent files as empty
        -q      Output only whether files differ
        -r      Recurse
        -S      Start with FILE when comparing directories
        -T      Make tabs line up by prefixing a tab when necessary
        -s      Report when two files are the same
        -t      Expand tabs to spaces in output
        -U      Output LINES lines of context
        -w      Ignore all whitespace

Теперь я установил две папки на моем NAS, используя diff -q -r /a /b | tee xyz.log . Однако, похоже, что эти команды сравнивают только имена файлов, а не их содержимое, так как она сообщает Common subdirectories /a/file.ext and /b/file.ext для каждой пары файлов, то есть около 150.000 раз. Почему не сравнивается содержимое файла, и какую команду я должен использовать вместо?

2 ответа2

4

Я столкнулся с аналогичной / той же проблемой с моим Synology NAS (BusyBox v1.16.1):

diff -arq Dropbox/abc/ library/abc/ > abc.diff

произвел много записей, таких как Common subdirectories: Dropbox/abc/yz/tuv.pdf and library/abc/yz/tuv.pdf хотя указанный файл был в xyz/tuv.pdf (x отсутствует).

Но следующая команда (без трейлинга /) работала, как и ожидалось:

diff -arq Dropbox/abc library/abc > abc.diff
0

Вы используете утилиту diff правильно.

Похоже, что системные вызовы сообщают, что эти файлы вместо каталогов. Это, вероятно, проблема где-то еще в системе, а не в busybox diff.

Все это сводится к следующим строкам кода в editors/diff.c:

if (S_ISDIR(stb[0].st_mode) && S_ISDIR(stb[1].st_mode))
                printf("Common subdirectories: %s and %s\n", fullpath[0], fullpath[1]);

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .