파일이 존재하는지, 비어 있지 않은지, 다른 파일과 같은지 확인하고 싶습니다. 그렇다면 아무것도 하지 마십시오.
동일하지 않으면 를 사용하십시오 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
종료 상태만 반환합니다.