하위 디렉터리가 포함된 디렉터리에서 파일을 삭제하는 자동화된 프로세스를 설정하고 있습니다. 디렉터리의 파일을 삭제하고 하위 디렉터리는 그대로 유지하고 싶습니다. 이제 저는 rm *
해당 디렉토리의 파일을 삭제하는 데 사용합니다. 그러나 이 명령은 다음 메시지를 표시합니다 cannt remove 'dir': Is a directory
. 제가 까다롭다는 것은 알지만 이 메시지가 내 로그에 반복적으로 나타나는 것을 원하지 않습니다. 삭제하는 데 사용할 수 있는 더 나은 명령이나 rm
하위 디렉터리를 무시할 수 있는 방법이 있습니까 ?
답변1
오류 메시지를 삭제할 수 있습니다.
rm * 2>/dev/null
이렇게 하면 모든 오류가 제거됩니다. 다른 잠재적인 오류를 확인하려면 좀 더 복잡한 작업을 수행할 수 있습니다.
rm * 2>&1 | grep -v 'cannot remove .*: Is a directory'
이렇게 하면 다른 오류가 계속 기록됩니다.
답변2
zsh에서:
rm *(^/)
다른 쉘 zsh와 동등한 쉘이 없습니다글로벌 예선. 대신, find
유형별로 파일을 구별할 수 있는 를 호출하고 .
(시작 디렉터리) 이외의 하위 디렉터리로 재귀하지 않도록 지시할 수 있습니다.
find . -name . -o -type d -prune -o rm -f {} +
이렇게 하면 도트 파일이 삭제되지만 *
도트 파일과 일치하지 않습니다. 도트 파일을 보관하려면 find
호출하지 말라고 말하세요 rm
.
find . -name . -o -type d -prune -o ! -name '.*' rm -f {} +
-mindepth
( , -maxdepth
및 를 사용할 수 있지만 이러한 옵션이 없는 시스템에서 -delete
스크립트를 실행할 필요가 없는 경우에만 사용할 수 있습니다 . 제가 사용한 옵션은 이식 가능합니다.)find
답변3
당신을 위한:
find ./ -type f -exec rm -f * {} \; 2> /dev/null
하위 디렉터리의 파일을 그대로 유지하려면 다음을 수행하세요.
rm -f * 2> /dev/null