'rm -r ~'은 내 홈 디렉토리에서 무엇을 했습니까?


17

gedit는 '~'로 끝나는 숨겨진 백업 파일을 만듭니다. 디렉토리 트리를 재귀 적으로 정리하고 싶었습니다.

이 명령 rm *~은 '~'로 끝나는 모든 로컬 파일을 삭제합니다.

rm -r *~ .전체 트리의 모든 파일을 삭제 한다고 생각 했지만 오타가 rm -r ~있습니다.

일부 디렉토리를 삭제할 수 없다는 메시지가 표시되어 명령을 종료했습니다. 문제는 무엇을 삭제하고 있습니까?

Filezilla 구성이 사라졌습니다. 이 명령은 홈 디렉토리에서 모든 숨겨진 디렉토리를 삭제합니까?


4
글쎄, 적어도 나는 백업 전략을 가지고있다.
GUI Junkie

2
알아 둘만 한; -r모든 것을 없애고 싶지 않으면 절대 사용 하지 않는 정책이 있습니다.
ish

3
참고로, rm -r *~ .현재 디렉토리에서 *~또는 일치하는 모든 파일과 폴더를 삭제합니다 .. ( .에 의해 무시 될 rm대부분의 사람들이 반복적으로 현재 디렉토리를 삭제하지 않는 한, 특별한 예외로.는 *~현재 디렉토리에있는 모든 파일과 디렉토리들은 삭제가 결국 ~,하지만 하지 현재 디렉토리의 하위 디렉토리에있는 파일과 디렉토리. ) 그래서 그것은 당신이 원했던 것이 아닙니다. 디렉토리 트리를 재귀 적으로 살펴보고로 끝나는 각 파일을 비재 귀적으로 삭제 하기 find위해 -exec플래그 와 함께 사용하려고했을 것입니다 . ~
Eliah Kagan 2016

@ EliahKagan, 그렇게 추측하지만 -exec로 찾기는 항상 번거 롭습니다. 홈 디렉토리를 복구하는 것은 번거롭지 만, :-)
GUI Junkie

1
정보 : ~이스케이프하지 않고 캐릭터를 노래하면 (이와 같이 \~) Bash, ZSH 등 ( rm기본적으로 명령)이 홈 디렉토리를 의미한다고 생각합니다.
토마스 워드

답변:


31

모든 홈 디렉토리를 (거의) 삭제했습니다!

rm -r something 재귀 에서 /에있는 파일 및 디렉토리 삭제 무언가를 ; 다른 사용자가 소유 root했거나 (예 : GVFS 마운트) 삭제 권한이없는 항목에 대해서만 실패합니다 .

-f(에서와 같이 rm -rf something) 추가하지 않으면 다음과 같은 결과가 나타납니다.

rm: remove write-protected regular file something’?
rm: descend into write-protected directory something’?

이 시점에서 중단하면 잘못된 명령을 실행했음을 알 수 있습니다.

그러한 사고를 피하는 방법에 대한 지역 사회의 제안

참고 : 커뮤니티 위키, 누구나 부담없이 참여하십시오.

  • 일부 파일의 경우 -i옵션을 사용하여 파일 또는 디렉토리 제거에 대한 확인을 받으십시오.

    $ rm -ri something/
    rm: remove regular file something/file~’? y
    rm: descend into directory something’? y
    rm: remove regular file something/file’? y
    rm: remove directory something’? y
  • 현재 디렉토리에서 ./제거하는 경우 다른 위치를 잘못 제거하지 않도록 접두사 a 를 붙입니다 . :

    $ cd something
    $ rm -v ./*~
    removed ‘./file~’

    위의 사용을 보여주기위한 것입니다 ./. 하위 디렉토리가 있으면 물론 사용할 수도 rm -v something/*~있습니다. 주의 : rm ./.*현재 디렉토리의 모든 숨겨진 파일 을 제거 한다고 생각하지 마십시오 . 숨겨진 파일 글 로빙에 대한 해결 방법 은 이 Serverfault 질문 을 참조하십시오 .

  • 삭제하지 않고 이동 : 처음부터 파일을 재귀 적으로 삭제하는 대신 파일을 이동 하는 데 익숙해 져서 마지막으로 삭제하기 전에 다른 곳을 제거하고 싶습니다. 문제가 발생하면 쉽게 복원 할 수 있습니다.

    mv -b SOURCE DEST
  • 선택한 파일을 재귀 적으로 삭제하려면 미리보기로find (을 사용 하여 grep) 사용하십시오 . 당신은 이것을 드물게 만들려고 노력해야하지만, 당신이해야한다면 ...

    1. find인수없이 현재 파일 아래의 모든 파일 / 디렉토리를 재귀 적으로 나열합니다. man find선택적인 방법 (보물 통) 을 찾는 방법 을 찾아봐야 하지만 귀찮게하고 싶지 않다면 친숙한 grep것을 사용하여 삭제하려는 파일을 필터링하면됩니다.
    2. 내가 uber-l33t 커널 해커라고 가정하고 소스 트리에 몇 KB의 "예제"파일이 있다고 가정합니다. 이름에 포함 된 모든 파일을 삭제하고 싶습니다. 그래서 나는 20 개의 파일find | grep example 을 제공하는을 입력 합니다. 그것은 좋아 보인다. 이제 나는 rm -v이전에 언급 한 자세한 출력 과 함께 정확한 파일을 삭제한다 xargs.
      찾기 | grep 예제 | xargs rm -v
      이 출력 을 제공 합니다. 이러한 미리보기는 sample대신 오타와 유형을 만드는 문제를 방지합니다 example.

공백, 탭 문자, 줄 바꿈 또는 따옴표 ( "또는 ')가 포함 된 파일 이름이있는 경우 위의 해결 방법을 사용하지 않아야합니다. 이로 인해 xargs실패하거나 rm불완전한 파일 이름 이 제공되므로 최악의 경우 잘못된 항목을 제거 할 수 있습니다. 파일. 위의 작업을 수행하는 안전한 방법은 모든 find연산자와 작업을 수행하는 것입니다.

다음은 단어가 포함 된 모든 파일을 보여줍니다 example

find . -name "*example*"  

해당 목록이 제거하려는 파일 인 경우 -exec조치를 사용 하여 파일을에 전달하십시오 rm.

find . -name "*example*" -exec rm -v {} +

사용에 대한 자세한 내용은 찾기 사용을 참조하십시오 find.


1
배관 find출력 grepxargs rm위험합니다.
geirha

2
@izx : 추가됨 mv(내가 가장 좋아하는 명령);)
Takkat

1
find파일 이름에 공백, 탭, 줄 바꿈 "또는 '문자가 포함 된 경우 안전한 방법 을 사용하는 예를 적어도 추가했습니다 . 예 find . -name "*example*" -exec rm -v {} +. mywiki.wooledge.org/UsingFind
geirha

1
@geirha : 왜 find -delete그렇게 위험한가요? 나는 여기에 무언가를 말했을 것입니다. 그러나 /옵션없이 건조한 실행에도 불구하고 최근에 찾은 것을 제외하고는 제거하지 않을 -delete파일이 거의 없었습니다. -exec rm대신 당신이 추천 합니다.
Takkat

3
@Takkat -delete은 위험하지 않으므로 대신 대신 사용할 수 있습니다 -exec rm {} +. 나는 일반적으로 가능한 경우 표준 도구와 기능을 사용하는 것을 선호합니다. -delete은 비표준 GNU 확장 find이므로 우분투에서는 잘 작동하지만 다른 시스템에서는 작동하지 않을 수 있습니다.
geirha 2016 년

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.