답변:
당신이하려는 것은 재귀 삭제입니다. 이를 위해서는와 같은 재귀 도구가 필요합니다 find
.
find FOLDER -type f -delete
로 bash
:
shopt -s globstar ## Enables recursive globbing
for f in FOLDER/**/*; do [[ -f $f ]] && echo rm -- "$f"; done
여기서 glob 확장 파일 이름을 반복하고 파일 만 제거합니다.
위의 내용은 드라 이런이며 변경 사항에 만족하면 echo
실제 제거를 위해 제거하십시오.
for f in FOLDER/**/*; do [[ -f $f ]] && rm -- "$f"; done
마지막으로 unset globstar
:
shopt -u globstar
을 사용 zsh
하여 glob 한정자를 활용하십시오.
echo -- FOLDER/**/*(.)
(.)
glob 한정자이므로 glob 확장은 일반 파일로만 제한됩니다.
위의 파일은 실제 제거를 위해 파일 이름 만 인쇄합니다.
rm -- FOLDER/**/*(.)
의 버전이 find
지원되지 않는 -delete
경우 다음을 사용하여 현재 디렉토리와 아래의 모든 파일을 삭제할 수 있습니다.
find . ! -type d -exec rm '{}' \;
-exec rm {} +
특히 파일이 많은 경우 더 빠릅니다.
find . ! -type d -exec rm {} +
제거합니다뿐만 아니라 링크를 SYM.
find
지원 -delete
하지 않으면 아마도 -exec ... {} +
어느 것도 지원하지 않습니다 . 이를 처리하기 위해 권장되는 방법은 find ... -print0 | xargs -r0 rm
(많은 잠재적 인 일치를 예상하는 경우)입니다.
-exec ... {} +
POSIX이지만 -delete
그렇지 않습니다. (그런데도 마찬가지입니다 -print0
.)
find
지원 -print0
하지만 지원 하지 않는 POSIX 이외의 구현을 두 번 이상 경험했습니다 -exec ... {} +
(생각하지는 않습니다 -delete
). 하나는 OS X에 있고 다른 하나는 Solaris (몇 년 전 매우 보수적으로 업데이트 된 시스템)에있었습니다. 또한 대체 할 수 있습니다 -print0
로 -printf '%p\0'
. 어쨌든 이것은 Unix & Linux가 아닌 Ask Ubuntu 이며 Ubuntu는 영원히 GNU find를 사용합니다.