(때로는 비어 있는) 디렉터리에서 모든 파일을 제거합니다.

(때로는 비어 있는) 디렉터리에서 모든 파일을 제거합니다.

내 스크립트에는 디렉토리에서 모든 파일을 삭제하는 명령이 있습니다 www.

rm -rf www/*

그러나 어떤 경우에는 www디렉토리가 비어 있습니다. 그런 다음 그는 전체 스크립트가 실패하도록 명령했습니다.

빈 디렉토리에서 실패하지 않는 더 나은 명령이 있습니까?

편집: 파일을 보관하고 싶기 때문에 숨겨진 파일이 삭제되지 않았다면 완벽할 것입니다 .gitkeeep. 내가 받아들일 수 있는 최악의 시나리오... && touch .gitkeep

답변1

POSIX 사용 find:

find www -path 'www/[!.]*' -prune -exec rm -r -- {} +

설계상 인수가 제공되지 않으면 find가 실패하지 않습니다. 바라보다매뉴얼의 예 8이것은 이것을 분명히 보여줍니다.

옵션 의미:

  • -pathwww/점으로 시작 하고 뒤에 점이 오지 않는 경로만 찾도록 지정합니다 (따라서 제거 목록에서 숨겨진 파일을 제외함).

  • -prunefind가 디렉토리에서 내려오려는 시도를 방지합니다(이미 이를 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 -- {} +

관련 정보