윌 rm -rf *
현재 디렉토리에있는 모든 파일 / 폴더를 제거? 와일드 카드 *
가 상위 디렉토리로 이동하지 않고 모든 파일 시스템이 지워지지 않도록하고 싶습니다. :디
나는 일을 기억 chmod 777 .* -R
에 chmod
숨김 파일 및 그것은 chmod
내 파일 시스템을 모두 에드. 분명히, 나는 루트 계정에 있었다.
윌 rm -rf *
현재 디렉토리에있는 모든 파일 / 폴더를 제거? 와일드 카드 *
가 상위 디렉토리로 이동하지 않고 모든 파일 시스템이 지워지지 않도록하고 싶습니다. :디
나는 일을 기억 chmod 777 .* -R
에 chmod
숨김 파일 및 그것은 chmod
내 파일 시스템을 모두 에드. 분명히, 나는 루트 계정에 있었다.
답변:
아니요, 쉘을 많이 조정하지 않으면로 시작하는 파일이나 디렉토리가 제거되지 않습니다 .
. 그것들을 제거하려면 명시 적으로 나열 할 수 있습니다
rm -rf .file .dir
또는 올바른 glob 패턴을 사용하십시오 (Chris에게 감사합니다)
rm -rf .[^.]* ..?*
편집은 여기에서 요점은 당신이 사용할 수 없다는 것입니다 .*
같은 파일과 일치하기 .file
때문에, .*
나 .*?
또한 일치 ..
또는 .
. .[^.]*
같은 파일과 일치 .file
하는 반면, 같은 파일과 ..?*
일치합니다 ..foo
( *
0 개 이상의 문자 ?
와 일치하고 정확히 1 개와 일치).
..?*
".."로 시작하는 항목을 잡는 것과 같은 것도 필요합니다 (예 :) ..foo
.
rm
. 따라서 *를 사용하여 디렉토리의 내용을 삭제하는 것이 가장 현명한 방법은 아닙니다.
xargs
은이 질문의 범위를 약간 벗어난 것 같습니다. 예를 들어 쉘이 인수 목록 길이를 불평 할 때 그것에 대해 생각하기 시작할 수 있습니다.
디렉토리와 그 내용을 모두 제거 하려면 전체 글 로빙 질문을 무시하고 이름을 기준으로 chdir
상위 디렉토리와 rm -rf
해당 디렉토리로 이름을 지정할 수 있습니다 . 내용을 제거하고 디렉토리를 유지하려면 모두를 제거한 다음 디렉토리를 다시 작성하는 것이 가장 쉽습니다.
가능한 모든 디렉토리 항목 save와 일치하는 glob을 만드는 것은 복잡합니다. 그리고 ..; * .??*
거의 항상 실제로 작동 하는 간단한 답변 (예 :)을 쉽게 얻을 수 있습니다 . 기억하기 쉽고 작동하지 않는 시간을 post-rm로 잡을 수 있기 때문에 대화식으로 사용하는 것이 ls -a
좋습니다. 스크립트의 경우 모두 제거를 수행하고 빈 디렉토리를 다시 만드는 것이 더 쉽습니다.
이 질문은 * 가하는 일 (그리고 rm이 아닌)에 관한 것이므로 다른 접근법을 시도해 봅시다.
*의 기능이 확실하지 않은 경우 먼저 echo와 같은 무해한 명령을 사용하여 "테스트"할 수 있습니다. 당신이 이것을 실행하기 전에, 당신이 당신의 홈 디렉토리에서 그들을 실행하면 그들이 무엇을 보여줄지 추측하십시오.
echo *
echo .*
그러나 먼저 놀이터를 만들어서 별과 놀면서 우리가 무엇을 끝내는지 볼 수 있습니다.
mkdir ~/star_test/
cd ~/star_test/
>.file1
>file2
이제이 디렉토리에서 우리는 이것을 가지고 있습니다 :
cj@zap:~/star_test$ ls -1a
.
..
.file1
file2
이제 echo 명령을 사용하여 *가 확장되는 것을 확인하십시오.
cj@zap:~/star_test$ echo *
file2
cj@zap:~/star_test$ echo .*
. .. .file1
rm 명령으로 어떤 일이 발생하는지 봅시다
cj@zap:~/star_test$ rm -rf *
cj@zap:~/star_test$ ls -1a
.
..
.file1
보시다시피, 그는 file2로만 확장되었으므로 *는 file2로만 확장되었습니다. rm -rf. *를 입력하면 쓰는 것과 동일합니다.
rm -rf . .. .file1
그리고 솔직히 말하면 재미있게 보이지는 않습니다.)
이것이 귀하의 질문의 * 부분을 명확히하기를 바랍니다.
업데이트 : 그러나 Ankur Goel이 지적한 것처럼 rm에 내장 된 보호 기능이 있습니다 (쉘 명령의 경우 비정상적입니다 :)
새로운 놀이터를 만들자 :
cd ~/star_test/
mkdir -p test1/test2/test3
sudo chown root.root test1
cd test1/test2/test3/
>.file1
>file2
이제 우리는 이것을 다시 얻었지만 rm이 rrserk을 시작하면 root로 test1을 소유합니다.
cj@zap:~/star_test/test1/test2/test3$ ls -a
. .. file2 .file1
cj@zap:~/star_test/test1/test2/test3$ echo .*
. .. .file1
따라서 모든 것을 제거합시다 :
cj@zap:~/star_test/test1/test2/test3$ rm -rf .*
rm: cannot remove directory `.'
rm: cannot remove directory `..'
cj@zap:~/star_test/test1/test2/test3$ ls -a
. .. file2
그리고 rm이 제거하지 않은 것 같습니다. 그리고 .. 우리가 그에게 말해도 !!!
따라서이 긴 대답 후에는 다음과 같이 디렉토리의 모든 것을 제거하는 것이 안전합니다.
rm -rf * .*
그러나 rm의 모든 구현이 이와 같이 작동하는지 확실하지 않기 때문에 이것을 조심스럽게 사용합니다!
이 답변 에서 논의 된 "너무 많은 인수"문제를 피하면서 전체 폴더를 비우는 훨씬 쉬운 방법 은 단순히 디렉토리 자체를 삭제하고 다시 만드는 것입니다. 심볼릭 링크 디렉토리에있을 때 이것이 올바르게 작동하도록하려면 다음 행을 사용하십시오.
cd ..
rm -rf $(readlink -f yourdir) #remove the directory, treat the case of a symlink
# by using readlink, to recreate the linked-to directory
mkdir $(readlink -f yourdir) # recreate the directory to have it empty
cd yourdir
( yourdir
대신 대신 사용 $(readlink -f yourdir)
하는 경우 원래 위치가 가득 찬 상태에서만 링크를 교체하십시오)
xargs
.
rm -rf ./*
현재 디렉토리를 명시 적으로 지정하는 이유입니다 ... 그러나 Ankur는 그것이 중요하지 않다고 말합니다.