rm -rf 모든 파일과 모든 숨겨진 파일없이. & .. 오류 않은 모든 파일을 삭제합니다. rm

rm -rf /some/path/* 해당 디렉토리 (및 하위 디렉토리)에서 숨겨지지 않은 모든 파일을 삭제합니다.

rm -rf /some/path/.* 해당 디렉토리에있는 모든 숨겨진 파일 (하위 디렉토리는 아님)을 삭제하고 다음과 같은 오류 / 경고를 제공합니다.

rm: cannot remove directory: `/some/dir/.'
rm: cannot remove directory: `/some/dir/..'

에 대해 경고 / 오류가 발생하지 않고 대상 디렉토리에있는 모든 숨겨진 비 숨김 파일 및 재귀 적 폴더를 제거하는 적절한 방법은 무엇입니까 .와는 ..?



답변

항상 오류 메시지를 보낼 수 있습니다 /dev/null

rm -rf /some/path/.* 2> /dev/null

당신은 또한

rm -rf /some/path/
mkdir /some/path/

… 먼저 숨겨진 파일을 신경 쓸 필요가 없습니다.


답변

*모든 비점 파일과 .[!.]*일치하고 ., 파일을 제외한 모든 점 파일 과 이름이로 시작하는 파일 ....?*일치 하고 ,를 제외한 모든 점 파일 과 일치합니다 ... 함께 .및 이외의 모든 파일을 찾습니다 ... 이 세 가지 패턴 중 어느 것도 일치하지 않으면 자체로 확장됩니다. rm -f존재하지 않는 인수에 대해서는 신경 쓰지 않으므로 중요하지 않습니다.

rm -rf ..?* .[!.]* *

을 사용할 수도 있습니다 find. 이것은 더 복잡하지만 위의 와일드 카드가 시스템의 명령 행 길이 제한을 초과하여 확장 할 수있는 파일이 너무 많아도 작업 할 수있는 이점이 있습니다.

find . -name . -o -prune -exec rm -rf -- {} +

디렉토리를 제거하고 다시 작성하는 것이 더 명확 할 수 있습니다. 이것은 다른 프로그램이 원래 디렉토리에 파일을 동시에 작성하더라도 디렉토리가 비어있는 장점이 있습니다 (또는 경우에 따라 단점).


답변

이것이 대부분의 Linux 배포판에서 가장 편리한 방법이라는 것을 깨달았습니다.

ls -A1 | xargs rm -rf

어디

-A= 모든 목록 제외를 . 하고..

-1 = 모든 항목을 한 줄에 넣습니다.


답변

dotglob쉘 의 옵션을 변경하고을 사용 *하거나 다음과 같은 것을 사용하십시오 find.

find somedir -mindepth 1 -delete

답변

이것은 @ Giles 답변과 동일하게 작동하지만 더 컴팩트합니다.

rm -rf {,.[!.],..?}*

또는

rm -rf dir/to/files/{,.[!.],..?}*

if안전을 위해 스크립트에서 사용법을 추가해야 합니다.

if [ -d "$DIR" ]; then
    rm -rf ${DIR}/{,.[!.],..?}*
fi

답변

친구를 찾으십시오.

find ! -name '.' ! -name '..' -delete

% find ! -name '.' ! -name '..'
./test
./test4
./test4/.test6
./test3
./.test5
./test2
% find ! -name '.' ! -name '..' -delete
% find ! -name '.' ! -name '..'
%

재귀 적으로 현재 디렉토리 ($ PWD) 이외의 것을 검색하려면 find명령 바로 뒤에 경로를 추가하십시오 . 예를 들어, find /path ! -name '.' ! -name '..' -delete. n여러 디렉토리 만 내림차순으로 -maxdepth n하려면 /path매개 변수 바로 뒤에있는 옵션 을 사용하십시오 .

위 명령은 Ubuntu 13.04 시스템에서 테스트되었습니다. 다른 최신 리눅스 시스템에서도 작동 할 것입니다.


답변

에 대한 경고 / 오류를받지 않고 대상 디렉토리에서 숨겨진 모든 파일과 폴더를 재귀 적으로 제거하는 올바른 방법은 무엇입니까? 그리고 ..?

문제의 디렉토리입니다 가정 ./dir한 후,

rm -rf ./dir

./dir숨겨진 파일과 디렉토리를 포함하여 재귀 적으로 ./dir디렉토리 자체를 포함하여의 모든 파일을 제거 합니다.

디렉토리 자체를 삭제하지 않으려면 나중에 다시 생성하거나 사용하십시오.

find ./dir -mindepth 1 -delete

또는 당신이 경우 find지원하지 않습니다 -delete,

find ./dir -mindepth 1 -depth -exec rm -rf {} ';'

를 사용 -mindepth 1하면 최상위 디렉토리를 유지할 수 있습니다 ./dir.