WD My Book World Edition에서 SSH를 통해 작업하고 있습니다. 기본적으로 특정 디렉토리 수준에서 시작하고 일치하는 모든 하위 디렉토리를 재귀 적으로 제거하고 싶습니다 .Apple*
. 어떻게하면 될까요?
나는 시도했다
rm -rf .Apple*
과 rm -fR .Apple*
하위 디렉토리 내에서 해당 이름과 일치하는 디렉토리를 삭제하지 않았습니다.
답변
find
전체 트리에서 선택적으로 작업을 수행하는 데 매우 유용합니다.
find . -type f -name ".Apple*" -delete
여기서는 -type f
디렉토리가 아닌 파일인지 확인하고 심볼릭 링크, 소켓 및 기타 항목을 건너 뛰기 때문에 원하는 것이 아닐 수도 있습니다. 당신이 사용할 수있는 ! -type d
문자 그대로 디렉토리를 의미하지하는,하지만 당신은 또한 문자와 블록 장치를 삭제할 수 있습니다. -type
에 대한 매뉴얼 페이지 에서 술어를 살펴볼 것을 제안 합니다 find
.
와일드 카드로 엄격하게 수행하려면 고급 셸 지원이 필요합니다. Bash v4에는을 사용하여 하위 디렉토리를 재귀 적으로 일치시킬 수 있는 globstar
옵션 이 있습니다 **
. zsh
그리고 ksh
이 패턴을 지원합니다. 그것을 사용하면 할 수 있습니다 rm -rf **/.Apple*
. 이것은 POSIX 표준이 아니며 이식성이 좋지 않기 때문에 스크립트에서 사용하지 않는 것이 좋지만 일회성 대화 형 셸 동작에는 문제가 없습니다.
답변
매뉴얼 페이지에 명시된 바와 같이 의도적 인 행동으로 인해 문제 find
가 -delete
발생했습니다 find
(예 : 경로가 ./로 시작하면 경로 삭제를 거부 함).
-delete
찾은 파일 및 / 또는 디렉토리를 삭제하십시오. 항상 true를 반환합니다. 찾기가 트리 아래로 반복 될 때 현재 작업 디렉토리에서 실행됩니다. 경로 이름에 “/”를 기준으로 “/”문자가있는 파일 이름은 삭제하지 않습니다. 보안상의 이유로.
이 옵션은 깊이 우선 순회 처리를 의미합니다.
다음 심볼릭 링크는이 옵션과 호환되지 않습니다.
대신, 나는 단지 할 수 있었다
find . -type d -name 'received_*_output' -exec rm -r {} +
귀하의 경우, glob (별표, *)를 인용하는 것이 해결책이지만, 다른 사람이 비슷한 문제를 겪을 경우에 대비하여 답변을 드리고 싶습니다.
참고 : 이전에는 제 대답은 다음을 수행하는 것이었지만 @Wildcard는 주석에서 보안 결함을 지적했습니다.
find . -type d -name 'received_*_output' | xargs rm -r
답변
가능한 이유는 rm / find 명령에 아무런 문제가 없지만 로그인 한 사용자에게는 실제로 삭제 권한이없는 것입니다. 사용 ls -l
권한이있는 항목을 나열하는 데 사용하고 사용중인 사람 id
과 groups
명령을 식별 할 수 있습니다 (사용 가능해야 함). “잘못된 사용자”인 경우 파일의 권한 / 소유권을 변경하거나 다른 사용자로 전환해야합니다.
답변
시험:
shopt -s dotglob # using Bash
printf '%s\n' ./.Apple* # test
#rm -rf ./.Apple*
답변
간단한 명령 :
rm `find ./ -name '.Apple*'` -rf
행운을 빕니다!