내 스크립트에는 디렉토리에서 모든 파일을 삭제하는 명령이 있습니다 www
.
rm -rf www/*
그러나 어떤 경우에는 www
디렉토리가 비어 있습니다. 그런 다음 그는 전체 스크립트가 실패하도록 명령했습니다.
빈 디렉토리에서 실패하지 않는 더 나은 명령이 있습니까?
편집: 파일을 보관하고 싶기 때문에 숨겨진 파일이 삭제되지 않았다면 완벽할 것입니다 .gitkeeep
. 내가 받아들일 수 있는 최악의 시나리오... && touch .gitkeep
답변1
POSIX 사용 find
:
find www -path 'www/[!.]*' -prune -exec rm -r -- {} +
설계상 인수가 제공되지 않으면 find가 실패하지 않습니다. 바라보다매뉴얼의 예 8이것은 이것을 분명히 보여줍니다.
옵션 의미:
-path
www/
점으로 시작 하고 뒤에 점이 오지 않는 경로만 찾도록 지정합니다 (따라서 제거 목록에서 숨겨진 파일을 제외함).-prune
find가 디렉토리에서 내려오려는 시도를 방지합니다(이미 이를rm -r
수행하는 것을 사용하고 있습니다).--
in에서는rm -r -- {} +
하이픈으로 시작하는 경우에도 발견된 파일을 처리할 수 있습니다.
답변2
간단한 방법이 있습니다순수한 배쉬(내장된 경우에만):
사용하더라도
set -e
0이 아닌 종료 오류 시 스크립트를 중지하려면 다음을 수행할 수 있습니다.
shopt -s nullglob # don't treat * literally
shopt -u dotglob # don't match .dotfiles
rm -rf www/* 2>/dev/null || true
# < hide err>< >
# only if set -e
답변3
find www -mindepth 1 -maxdepth 1 -exec rm -r -- {} +
디렉터리 .gitkeep
에 있으면 다음을 수행할 수 있습니다.www
find www -mindepth 1 -maxdepth 1 ! -name .gitkeep -exec rm -r -- {} +