rm -rf B
방금 B 폴더에 있는 A 폴더의 일부 데이터를 잃어버렸습니다. 내가 무슨 짓을 했는지 깨닫기도 전에 모든 일은 끝났습니다. 이제 교훈을 얻었으므로 다음에 비슷한 일을 하고 자살 충동을 느낄 때를 피하기 위해 내 폴더 중 일부를 바보 방지로 만들기를 바라고 있습니다.
제가 생각할 수 있는 한 가지 방법은 bash 함수를 작성하고 에 별칭을 지정하는 것입니다 rm
. 이 함수는 모든 하위 폴더에서 숨겨진 파일을 찾습니다(예 .dontdelete
: . 이 폴더에 지속적으로 쓰는 프로세스가 있기 때문에 쓰기 방지를 설정할 수 없습니다. 더 좋은 방법이 있나요?
답변1
귀하의 문제를 조사하는 동안 앞으로 도움이 될 수 있는 이 기술을 발견했습니다.
분명히 다음과 같이 디렉토리의 파일을 터치할 수 있습니다.
touch -- -i
rm -fr *
이제 존재하는 디렉터리에서 명령을 실행하면 -i
에서 대화형 프롬프트가 표시됩니다 rm
.
$ ls
file1 file2 file3 file4 file5 -i
$ rm -fr *
rm: remove regular empty file `file1'? n
rm: remove regular empty file `file2'? n
rm: remove regular empty file `file3'? n
rm: remove regular empty file `file4'? n
rm: remove regular empty file `file5'? n
rm
동일한 효과를 얻으려면 항상 실행 되도록 별칭을 유지하세요 rm -i
. 이는 짜증스러울 수 있습니다. 내가 자주 본 것은 이 별칭을 먼저 설정한 다음 정말로 제거할지 묻는 메시지를 표시하지 않고 비활성화하는 것입니다.
alias rm='rm -i'
이제 디렉토리에 다음과 같은 내용이 표시됩니다.
$ ls
file1 file2 file3 file4 file5
$ rm -r *
rm: remove regular empty file `file1'?
별칭을 재정의하려면 다음을 수행하세요.
$ \rm -r *
그러나 이것은 여전히 멈출 수 없었다 rm -fr
. 그러나 그것은 어느 정도 보호를 제공합니다.
인용하다
답변2
다양한 가능성:
alias rm='rm -i'
- rm이 물어볼 것입니다 - 지정하지 않는 한-f
...chmod -w dir
- 이 디렉터리의 파일을 직접 보호합니다.chattr +i
당신이 진지하다면- rm 주위에 자신만의 래퍼를 작성하세요.
- 등...
그러나 더 나은 접근 방식은 좋은 백업을 만들고 중요한 데이터를 일종의 버전 제어(예: git
)로 유지하는 것일 수 있으며 이는 다른 많은 이점도 제공합니다.
답변3
버전 관리 소프트웨어를 사용하여 git
프로젝트를 패키징하세요.
전체 프로젝트를 삭제하지 않는 한, 디렉토리를 rm -rf .*
삭제 .git
하고 롤백에 필요한 모든 데이터를 잃게 하려면 의도적으로 입력해야 합니다.
여기에는 github 또는 bitbucket과 같은 원격 서버에 백업을 푸시할 수 있다는 추가 이점이 있습니다.
답변4
이 작업을 단순화하기 위해 스크립트를 만들었습니다. 루트 비밀번호를 묻지 않고 주어진 폴더 목록에 대한 읽기/쓰기 권한과 chattr 플래그를 대화식으로 수정하는 쉘 스크립트입니다. 아래 링크에서 zip 파일을 다운로드 받으실 수 있습니다.
https://drive.google.com/file/d/0B_3UYBZy2FVsMVpBSWdSWnFBYk0/edit?usp=sharing
또한 보다 쉽게 설정할 수 있도록 설치 스크립트도 포함시켰습니다. 지침은 zip 파일에 포함되어 있습니다.