Por que meu diff de busybox reporta 'Subdiretórios comuns' para cada par de arquivos?

1

Estou usando esta versão do diff no meu Synology NAS para verificar um backup:

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

Agora, eu dividi duas pastas no meu NAS usando diff -q -r /a /b | tee xyz.log . No entanto, este comando parece comparar apenas os nomes dos arquivos, não o conteúdo dos arquivos, pois ele reporta Common subdirectories /a/file.ext and /b/file.ext para cada par de arquivos - ou seja, cerca de 150.000 vezes. Por que não está comparando o conteúdo do arquivo e qual comando devo usar?

    
por bers 05.10.2014 / 18:15

2 respostas

4

Eu tive um problema parecido com o meu Synology NAS (BusyBox v1.16.1):

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

produziu muitas entradas como Common subdirectories: Dropbox/abc/yz/tuv.pdf and library/abc/yz/tuv.pdf , mesmo que o arquivo mencionado esteja em xyz/tuv.pdf ( x missing).

Mas o seguinte comando (sem arrastar / ) funcionou como esperado:

diff -arq Dropbox/abc library/abc > abc.diff
    
por 02.03.2015 / 23:09
0

Você está usando o utilitário diff corretamente.

Parece que as chamadas do sistema estão relatando que esses arquivos são diretórios. Este é provavelmente um problema em algum outro lugar do sistema, não no diff de busybox.

Tudo isso se resume às seguintes linhas de código em 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]);

Além disso, se você tiver problemas com o busybox, você pode se reportar à lista de discussão e a todos os problemas de caixa do busybox que você pode relatar diretamente para mim.

    
por 24.12.2014 / 16:03