Script para mostrar diferenças de arquivo

0

Estou tentando encontrar a diferença dos meus 2 arquivos e não consigo produzir nada. Aqui está o que eu fiz

#Compare files and redirect output
ACTUAL_DIFF='diff file.current file.previous 2>/dev/null'
if [ $? -ne 0 ]
    then
        echo "Comparing /tmp/file.current state (<) to /tmp/file.previous state (>), difference is: "
        echo ""
        echo $ACTUAL_DIFF | cut -f2,3 -d" "
        echo ""
    else
        echo "The current file state is identical to the previous run (on 'ls -l file.previous | cut -f6,7,8 -d" "') OR this is the initial run!"
        echo ""
    cat /tmp/file.diff
        echo ""
fi
    
por jphil1971 01.03.2017 / 21:37

1 resposta

1

Você precisa colocar a variável entre aspas, caso contrário, as novas linhas serão tratadas como separadores de palavras e toda a saída estará em uma única linha:

echo "$ACTUAL_DIFF" | cut -f2,3 -d" "

Outra maneira de fazer isso seria sem a variável, apenas canalizar diff diretamente para cut :

diff file.current file.previous 2>/dev/null | cut -f2,3 -d" "

Você pode usar o comando cmp mais simples no começo apenas para testar se os arquivos são diferentes.

E para colocar a saída em um arquivo enquanto o exibe, use o comando tee .

#Compare files and redirect output
ACTUAL_DIFF='diff file.current file.previous 2>/dev/null'
if ! cmp -s file.current file.previous 2>/dev/null
then
    echo "Comparing /tmp/file.current state (<) to /tmp/file.previous state (>), difference is: "
    echo ""
    diff file.current file.previous 2>/dev/null | cut -f2,3 -d" " | tee /tmp/file.diff
    echo ""
else
    echo "The current file state is identical to the previous run (on 'ls -l file.previous | cut -f6,7,8 -d" "') OR this is the initial run!"
    echo ""
    cat /tmp/file.diff
    echo ""
fi
    
por 01.03.2017 / 21:57