[shell] 이미 존재하는 경우 파일을 제거하는 쉘 스크립트

파일에 데이터를 저장하는 일부 작업을하고 있습니다. 그러나 스크립트를 실행할 때마다 이전 파일에 추가됩니다.

파일이 이미 존재하는 경우 파일을 제거하는 방법에 대한 도움말이 필요합니다.



답변

파일이 있는지 확인하지 말고 제거하십시오.

rm -f /p/a/t/h
# or
rm /p/a/t/h 2> /dev/null

파일이 존재하지 않으면 두 번째 명령은 실패하지만 (0이 아닌 종료 상태를 반환) 첫 번째 옵션 은 -f(short for --force) 옵션 으로 인해 성공 합니다. 상황에 따라 중요한 세부 사항이 될 수 있습니다.

그러나 파일에 추가하는 경우 스크립트가 >>파일로 파일을 리디렉션 하는 데 사용 하기 때문일 가능성이 큽니다 . 그냥 교체 >>와 함께 >. 코드를 제공하지 않았기 때문에 말하기가 어렵습니다.

과 같은 작업을 수행 할 test -f /p/a/t/h && rm /p/a/t/h 있지만 그렇게하는 것은 완전히 의미가 없습니다. 테스트가 true를 리턴 할 수도 있지만 / p / a / t / h는 제거하기 전에 존재하지 않거나 테스트가 실패하고 / p / a / t / h가 작성됩니다. 존재하지 않을 것으로 예상되는 다음 명령을 실행하기 전에. 이것을 시도하는 것은 고전적인 경쟁 조건입니다. 하지마


답변

내가 사용한 또 다른 한 줄 명령은 다음과 같습니다.

[ -e file ] && rm file


답변

이것을 사용할 수 있습니다 :

#!/bin/bash

file="file_you_want_to_delete"

if [ -f $file ] ; then
    rm $file
fi


답변

파일이 존재하는지 여부를 확인하는 단계를 무시하려면 상당히 쉬운 명령을 사용하면 파일이 존재하면 파일을 삭제하고 존재하지 않는 경우 오류를 발생시키지 않습니다.

 rm -f xyz.csv


답변

파일이 이미 존재하는 경우 파일을 제거하는 하나의 라이너 셸 스크립트 (Jindra Helcl의 답변에 따라) :

[ -f file ] && rm file

또는 변수와 함께 :

#!/bin/bash

file="/path/to/file.ext"
[ -f $file ] && rm $file


답변

이런 식으로 작동합니다

#!/bin/sh

if [ -fe FILE ]
then
    rm FILE
fi 

-f 일반 파일인지 확인

-e 파일이 존재하는지 확인

자세한 내용 은 if 소개

편집 : -f와 함께 사용되는 -e는 중복이므로 -f 만 사용하면 작동합니다.


답변

if [ $( ls <file> ) ]; then rm <file>; fi

또한 >대신 출력을 리디렉션 >>하면 이전 파일을 덮어 씁니다.