Почему мой busybox diff сообщает "общие подкаталоги" для каждой пары файлов?

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

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 раз. Почему не выполняется сравнение содержимого файла и какую команду следует использовать?

22
задан bers
23.05.2023 2:43 Количество просмотров материала 3202
Распечатать страницу

2 ответа

я столкнулся с аналогичной / той же проблемой с моим NAS Synology (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
4
отвечен alex.rind 2023-05-24 10:31

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

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

это все сводится к следующим строкам кода в редакторах/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]);

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

0
отвечен Matheus Izvekov 2023-05-24 12:48

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя

Похожие вопросы про тегам:

busybox
command-line
diff
linux
synology
Вверх