파일 차이점을 표시하는 스크립트

파일 차이점을 표시하는 스크립트

두 파일의 차이점을 찾으려고 노력하고 있지만 아무 것도 생성할 수 없습니다. 이게 내가 한 일이야

#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

답변1

변수를 따옴표로 묶어야 합니다. 그렇지 않으면 개행 문자가 단어 구분 기호로 처리되어 모든 출력이 한 줄에 표시됩니다.

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

또 다른 방법은 변수를 사용하지 않고 다음 diff으로 직접 파이프하는 것입니다 cut.

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

cmp처음에는 더 간단한 명령을 사용하여 파일이 다른지 테스트 할 수 있습니다.

출력을 파일에 저장하고 표시하려면 이 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

관련 정보