기존 파일을 덮어쓰기 전에 tar가 묻지 않는 이유는 무엇입니까?

기존 파일을 덮어쓰기 전에 tar가 묻지 않는 이유는 무엇입니까?

내가 작성한 Vim 플러그인의 수백 줄을 잃어버렸고, tar이전 버전이 포함된 파일을 추출했기 때문에 종종 백업을 계속하고 있습니다. 플러그인을 작성할 때 정기적으로 업데이트하기 때문에 소스 제어 관리를 사용하지 않기로 결정했습니다.

tar기본적으로 기존 파일을 덮어쓰기 전에 묻지 않는 이유는 무엇입니까? 우리는 일반적으로 속도와 편리함보다 보안을 원하기 때문에 파일을 자동으로 덮어쓰는 기본 동작 뒤에는 몇 가지 근거가 있다고 생각합니다. 예를 들어, 우리는 일반적으로 ; #ifdef NDEBUG대신 를 사용합니다 #ifdef DEBUG. 마찬가지로 파일을 덮어쓰기 전에 나에게 묻기를 원하며 tar나에게 묻지 않고 파일을 덮어쓰도록 지시하는 데 사용할 수 있는 몇 가지 플래그가 있습니다. 또한 tar플래그를 지정하지 않고 기본적으로 묻도록 하려면 어떻게 해야 합니까 ? tar이보다 안전한 기본 동작을 지원한다면 이 이외의 도구를 사용할 수도 있습니다.

시간 내 주셔서 감사합니다!

답변1

tar -k이 옵션은 파일이 이미 존재하는지 확인하도록 요청합니다. TAR_OPTIONS변수 에 추가 ( TAR_OPTIONS="$TAR_OPTIONS -k")하거나 별칭을 생성( )하여 기본적으로 설정할 수 있습니다 alias tar="tar -k".

답변2

rm다른 많은 유틸리티가 이 작업을 수행하지 않는 것과 같은 이유 cp- 초기부터 POSIX 디자인 철학은 콘솔에 있는 사람들이 자신이 하는 일을 알고 있다고 가정하고 설명이 없는 한 설명을 요구하지 않는 것이었습니다. . 실제적인 문제.

이와 같은 경우 tar매뉴얼 페이지를 살펴보면 플래그를 TAR_OPTIONS포함하도록 env 변수를 설정해 볼 수 있음을 알 수 있습니다 --confirmation.

답변3

요청한 내용은 아니지만 덮어쓸 모든 원본 파일의 파일 이름에 --backup=simple추가되는 옵션을 사용할 수 있습니다.~

@thinker25의 조언에 따라 기본값을 사용하면 TAR_OPTIONS효과 alias가 있습니다.

데모는 다음과 같습니다 tar --backup=simple.

$ ls
hello.txt  my.tar
$ tar --backup=simple --extract -f my.tar
$ ls
hello.txt  hello.txt~  my.tar

관련 정보