명령이 실행되는 디렉터리 아래의 모든 하위 디렉터리에서 와일드카드를 제거하고 싶습니다.
답변1
find . -name '*.unwanted' ! -type d -delete
이름이 일치하는 파일 *.unwanted
(유형목차1) 현재 디렉터리와 아래 하위 디렉터리. 삭제되면 ! -type d
디렉터리 파일도 삭제되지만 비어 있지 않은 경우에만 해당됩니다.
숨겨진 파일과 숨겨진 디렉터리의 파일도 삭제됩니다.
-delete
BSD 확장이며(macOS에서도 작동함) GNU를 포함한 find
일부 다른 구현에서도 발견되지만 find
표준은 아닙니다( 지원하지 않는 -exec rm -f {} +
경우 find
다음으로 대체).
이제 macOS의 기본 대화형 셸은 이므로 zsh
셸 프롬프트에서도 동일한 작업을 수행할 수 있습니다.
rm -f -- **/*.unwanted(D^/) # same as find above, D for dot (hidden) files
rm -f -- **/*.unwanted(^/) # skip hidden files and dirs
rm -f -- **/*.unwanted(-^/) # consider the type of file after symlink resolution
rm -f -- ***/*.unwanted(^/) # follow symlinks when traversing the
# directory tree (same as find -L)
그러나 다음과 같은 문제가 발생할 수 있습니다.매개변수 목록이 너무 깁니다.파일 수가 많은 경우 오류가 발생하며 내장 명령을 사용하거나 zargs
사용하여 rm
해결할 수 있습니다 zmodload zsh/files
.
find
조건자와 zsh glob 한정자( 섹션) 모두 (...)
삭제하려는 파일을 더욱 구체화할 수 있습니다. 몇 가지 예:
-type f
/(.)
: 일반 파일만(! -type d
/ 대체(^/)
)-mtime -7
/(m-7)
: 7일 이내-size +1000000c
/(L+1000000)
: 1MB 이상입니다.-exec cmd {} \;
/(e['cmd $REPLY'])
, 실제 파일을 반환합니다cmd
.- 자세한 내용은 /
man
the/documentation()을 참조하세요.info
find
zsh
info zsh qualifiers
1 단, 디렉토리형 파일을 가리키는지 여부에 상관없이 심볼릭 링크를 제거한다.