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