디렉터리가 이미 비어 있으면 오류 없이 디렉터리의 파일을 삭제합니다.

디렉터리가 이미 비어 있으면 오류 없이 디렉터리의 파일을 삭제합니다.

배포 스크립트의 일부로 임시 디렉터리에서 캐시된 콘텐츠 일부를 덤프하고 싶습니다. 다음 명령을 사용합니다.

rm /tmp/our_cache/*

그러나 /tmp/our_cache비어 있는 경우(많은 변경 사항을 테스트 서버에 연속해서 적용할 때 흔히 발생함) 다음 오류 메시지가 인쇄됩니다.

rm: cannot remove `/tmp/our_cache/*': No such file or directory

큰 문제는 아니지만 약간 보기 흉하기 때문에 이 스크립트의 출력에서 ​​신호 대 잡음 비율을 줄이고 싶습니다.

유닉스에서 디렉토리가 비어 있다는 메시지를 받지 않고 디렉토리의 내용을 삭제하는 깔끔한 방법은 무엇입니까?

답변1

메시지를 표시하지 않고 모든 파일을 삭제하고 싶을 수도 있으므로 존재하지 않는 파일을 무시 -f하는 스위치를 사용하는 것은 어떨까요 ?rm

rm -f /tmp/our_cache/*

매뉴얼 페이지에서:

-f, --force
          ignore nonexistent files, never prompt

또한 하위 디렉터리가 있을 수 /tmp/our_cache/있고 해당 하위 디렉터리와 해당 콘텐츠도 삭제하려는 경우 -r스위치를 잊지 마세요.

답변2

find /tmp/our_cache/ -mindepth 1 -delete

편집 1

"-유형 f 제거됨

편집 2

-mindepth 1검색 루트가 제거되는 것을 방지하기 위해 비표준 옵션을 추가했습니다 (제한 해제 후 -type f).

답변3

표준 오류를 다음으로 리디렉션하여 /dev/null이를 인쇄하지 않도록 할 수 있습니다.

$  rm /tmp/our_cache/* 2>/dev/null

답변4

스크립트가 BASH를 사용하는 경우 다음을 시도해 볼 수 있습니다.

if test "$(ls /tmp/our_cache/)" !=  ""; then rm /tmp/our_cache/*; fi

이렇게 하면 "실제" 문제가 있거나 파일이 보호된 경우(그런 다음 해당 파일을 제거 -f하려면 수정자가 필요한 경우 rm) 여전히 오류가 발생하지만 파일이 없을 때는 오류가 발생하지 않습니다.

BASH 이외의 셸을 사용하여 zsh, ksh와 같은 스크립트를 작성하는 경우 이식성이 더 좋은 다른 구문을 사용해 볼 수 있습니다.

if [[ "$(ls /tmp/our_cache/)" !=  "" ]]; then rm /tmp/our_cache/*; fi

관련 정보