2017-03-25 16 views
2
rm -fr * 

,어떻게 rm -fr * 안정적으로? 한편 <code>.files</code></p> <p>삭제되지 않습니다

rm -fr * .* 

너무 많이 삭제됩니다!

Bash에서 디렉토리의 모든 내용을 재귀 적으로 삭제할 수있는 확실한 방법이 있습니까? 내가 생각할 수있는

한 가지 방법은 다음과 같습니다

rm -fr $PWD 
mkdir $PWD 
cd $PWD 

이 일시적으로 $PWD을 삭제하는 부작용이있다.

+0

'rm -rf dir'은 긴 dir이 현재 작업 디렉토리가 아니기 때문에 좋습니다. – codeforester

+0

나중에 참조 할 수 있도록 [unix.stackexchange.com] (http://stackoverflow.com/q/16926130/25507)에 더 적합 할 것입니다. –

답변

5

은 내가 먼저 사용하는 것이 좋습니다 :

shopt -s dotglob 

dotglob : 세트, 배쉬는

1
rm -fr * .* 

경로명 확장의 결과에 .로 시작하는 파일 이름이 포함 된 경우 상대적으로 '안전 ". rm...에 대해 POSIX에서 금지되어 있습니다. 오류 반환하지 않을 경우는 1을 반환하지만

rm -rf . .. 

는 아무 조합 수 없습니다, 당신은 할 수 있습니다 : POSIX 표준화

rm -rf .[!.]* 

, 아니 bash는 확장이 필요하지 .

또한 찾을 수 있습니다 :

find . -delete 
1

당신은 -delete-maxdepthfind을 사용할 수

:

find . -name "*" -delete -maxdepth 2 

을 그래서 당신은 다음과 같습니다 디렉토리 temp에있는 가정 해 봅시다

./temp 
    |_____dir1 
    |  |_____subdir1 
    X|_file X|_file  |_file 
    | 
    X|_____dir2 
      X|_file 

트리 옆에 X이있는 파일과 디렉토리는 위의 명령을 사용하여 삭제됩니다. subdir1은 검색이 허용되는 최대 깊이가 2로 설정되어 있고 그 안에 파일이 있기 때문에 사용할 수 없습니다. find.으로 시작하는 파일을 삭제하지만 기호 링크에는 작동하지 않습니다.

-delete 
     Delete found files and/or directories. Always returns true. 
     This executes from the current working directory as find recurses 
     down the tree. It will not attempt to delete a filename with a 
     ``/'' character in its pathname relative to ``.'' for security 
     reasons. Depth-first traversal processing is implied by this 
     option. Following symlinks is incompatible with this option. 
1

UNIX에 대한 일반적인 지혜는 같은 것을 사용하는 것입니다 일반 더블 점을 포함하지 않고 점 또는 두 점으로 시작하는 모든 파일을 나열합니다

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

을 ((./..)

그 유형의 파일이 존재하지 않으면 그 확장으로 별표가 유지됩니다.

,210

하자 시험 :

$ mkdir temp5; cd temp5 
$ touch {,.,..}{aa,bb,cc} 
$ echo $(find .) 
. ./aa ./cc ./..bb ./..aa ./.cc ./.bb ./..cc ./.aa ./bb 

그리고, 표시 등,이 모든 파일이 포함됩니다 :

$ echo * .[!.]* ..?* 
aa bb cc .aa .bb .cc ..aa ..bb ..cc 

그러나 유형 중 하나가 존재하지 않는 경우, 별표가있을 것입니다 :

$ rm ..?* 
$ echo * .[!.]* ..?* 
aa bb cc .aa .bb .cc ..?* 

이 문제를 해결하려면 별표가 포함 된 인수를 피할 필요가 있습니다.