파일이 존재하는지, 비어 있지 않은지, 다른 파일과 같은지 확인합니다.

파일이 존재하는지, 비어 있지 않은지, 다른 파일과 같은지 확인합니다.

파일이 존재하는지, 비어 있지 않은지, 다른 파일과 같은지 확인하고 싶습니다. 그렇다면 아무것도 하지 마십시오.

동일하지 않으면 를 사용하십시오 cat "some text".

파일이 존재하지 않거나 비어 있는 경우에도 파일을 생성합니다.cat some text

몇 가지 해결 방법을 시도했지만 하나의 조건을 충족할 때마다 다른 조건이 실패하거나 파일이 없으면 실패합니다.

이 문제를 해결하는 가장 깨끗한 방법은 무엇입니까? 이 모든 것이 bash를 사용하고 있습니까?

답변1

if [ -f file1 ] && [ -s file1 ] && [ -f file2 ] && [ -s file2 ] &&
    cmp file1 file2 &>/dev/null; then
    : do nothing in this case only
else
    echo "some text" >file1
    echo "some text" >file2 # or cp file1 file2
fi

댓글을 기반으로 한 더 짧은 버전

if [ -s file1 ] && cmp file1 file2 &>/dev/null; then
    : do nothing in this case only
else
    echo "some text" >file1
    echo "some text" >file2 # or cp file1 file2
fi

답변2

내가 하나 만들게

if ! ( [[ -s file1 ]] && cmp file1 file2 2>/dev/null 1>&2 )
then
  echo "some text" >file1
  cp file1 file2
fi

설명하다:

-s file1 file1이 존재하고 비어 있지 않으면 true로 평가됩니다.

두 파일이 모두 존재하고 동일한 경우 cmp 명령은 상태 코드를 0으로 설정합니다.

이 경우 우리는 그것들을 만지고 싶지 않기 때문에 조건을 무효화하기 위해 앞에 느낌표를 넣었습니다.

답변3

사용 cmp -s옵션:

#!/bin/bash

if ! ( [[ -s file1 ]] && cmp -s file1 file2 )
then
    echo "some text" > file1
    cp file1 file2
fi

-s옵션은 모든 출력을 자동으로 삭제 stdout하고 stderr종료 상태만 반환합니다.

관련 정보