"`dir`을 삭제할 수 없습니다: 디렉터리 메시지입니다. 무시

"`dir`을 삭제할 수 없습니다: 디렉터리 메시지입니다. 무시

하위 디렉터리가 포함된 디렉터리에서 파일을 삭제하는 자동화된 프로세스를 설정하고 있습니다. 디렉터리의 파일을 삭제하고 하위 디렉터리는 그대로 유지하고 싶습니다. 이제 저는 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

관련 정보