diff을 사용할 수없고 cmp을 사용할 수 없습니다.bash는 두 파일의 내용을 비교하고 결과에 따라 두 가지 다른 작업을 수행합니다.
우리는 통신을 사용할 수 있지만 스크립트의 조건부와 함께 사용하면 올바른 결과를 얻지 못합니다.
#!/bin/bash
# http://stackoverflow.com/a/14500821/175063
comm -23 <(sort /home/folder/old.txt) <(sort /home/folder/new.txt)
if [ $? -eq 0 ];then
echo "There are no changes in the files"
else
echo "New files were found. Return code was $?"
fi
그것은 항상 반환 파일 통신 명령과
에는 변화가 없습니다
, 성공적으로 실행되지만 파일의 내용이 다릅니다.
기업용 LINUX 상자이므로이 서버에 추가 할 수있는 대상은 매우 제한적입니다.
! comm -3 <(sort /home/folder/old.txt) <(sort /home/folder/new.txt) | grep -q '.*'
comm
명령이 어떤 차이를 발견 여부 성공 (상태 0으로 종료)하지만이 일치하는 항목을 찾은 경우grep
에만 성공 :
'comm'은 파일을 찾을 수 없거나 실패한 경우에도 항상 0을 반환합니다. 'comm'이 출력되는지 보려면 stdout을 검사해야합니다. – alvits
파일은 어떻게 생겼습니까? '$? '는 줄 수가 아닌 마지막 프로세스의 종료 상태입니까? – dawg
'$? '에 있습니다. 또한'comm -23'은 old.txt에 new.txt가 아닌 행을 반환합니다. old.txt에없는 new.txt의 행은 무시됩니다. 너가 원하는게 그거야? – John1024