tar 명령을 사용할 때 기존 파일 덮어쓰기를 방지하는 방법은 무엇입니까?

tar 명령을 사용할 때 기존 파일 덮어쓰기를 방지하는 방법은 무엇입니까?

이것아스팔트한 시간 전, 백업하기 위해 tar를 만들려고 했을 때 명령이 내 파일을 덮어썼습니다.

나는 달렸다

tar zcvf foo.tex foo.bib

그런 다음 내 tex 소스 파일이 손실되었습니다. 더 나쁜 점은 이런 식으로 파일을 잃어버린 것이 이번이 두 번째라는 것입니다.

나는 gvim을 사용하지만 'u' 명령은 내 파일을 복원합니다. "백업", "파일 실행 취소"에 대한 일부 도움말 항목을 살펴본 후 tar 명령이 내 파일을 다시 덮어쓰는 것을 방지하는 방법을 찾을 수 없습니다.

그런 다음 "-i"와 같은 매개변수를 찾으려고 합니다.CP또는MV, 그러나 많은 매개변수 중에서아스팔트찾을 수 없습니다.

다음에 새로운 foo.tar 항목을 추가하는 것을 기억할지 조금 확신이 없기 때문에 이런 일이 다시 발생하지 않도록 방지하는 방법을 알고 싶습니다.

답변1

파일 에 추가하세요 .bash_login. alias tar=tar --backup=simple 덮어쓸 파일에 ~가 추가됩니다.

따라서 아카이브를 생성하면 항상 실행됩니다.

tar --backup=simple zcvf foo.tex foo.bib

실행 후에는 foo.tex~가 존재하게 됩니다. (실제 tex 파일이고, 아카이브는 foo.tex에 위치하게 됩니다.)

답변2

파일 이름을 지정하는 대신 출력 리디렉션을 사용하십시오. 이는 tar뿐만 아니라 많은 명령에 적용됩니다.

물론, 당신의 중국어는 이미 set -o noclobber(철자도) 되어 있습니다. 그렇죠?set -C.bashrc

$ tar zc >foo.tex foo.bib
bash: foo.tex: cannot overwrite existing file

이 명령을 자주 실행하는 경우 수동으로 입력하지 마십시오.파일 생성.

foo.tar.gz: foo.tex foo.bib
        tar czf $@ $^

백업을 만들기 위한 것이 아니라 다른 사람에게 타르볼을 보내야 하는 경우에만 타르볼을 사용하십시오. 이전 버전을 백업하는 대신버전 관리(CVS, Mercurial, Git 등 원하는 대로). (디스크 장애나 실수로 저장소가 손상되거나 삭제된 경우 저장소를 백업하십시오.)

답변3

foo.tex이 문제는 tar의 "짧은" 옵션을 사용하면 해당 옵션에 속하는 항목을 난독화하는 방식으로 항목을 결합할 수 있기 때문에 발생합니다 f.

명령의 전체 버전(최신 버전 포함 tar)은 다음과 같습니다.

tar --create --file foo.tex --gzip --verbose foo.big

또는 단축 옵션을 사용하십시오.

tar -c -f foo.tex -z -v foo.big

내 경험상 두 경우 모두 파일에 잘못 쓴 경우가 더 분명합니다 foo.tex.

이 작업을 수행하려면 다음을 수행하십시오.

tar --create --file --gzip --verbose foo.tex foo.big

파일을 받고 --gzip파일 이름으로 자주 사용하지 않기를 바랍니다. 따라서 덮어쓰기는 문제가 되지 않습니다. (그런데 를 사용하여 이러한 파일 이름을 가진 파일을 삭제할 수 있습니다 rm -- --gzip.)

tar없는 단일 문자 옵션은 -옵션을 지정하는 이전/원래 방법입니다. 나처럼 유닉스 공룡들도 이를 사용하는 경향이 있지만 혼란스러운 것 같다. .tar

답변4

첫째, 올바른 문자를 기억하는 것은 쉽습니다.

  • czf= 압축파일 생성
  • xzf= 압축파일의 압축을 푼다

이렇게 생각하면 항상 옳아야 합니다.

중요한 데이터와 관련된 또 다른 작업은 버전 관리를 통해 데이터를 관리하는 것입니다. 나는 git이것을 추천한다. 모든 기록을 로컬에 저장하고 모든 기록을 다른 매체에 푸시할 수 있습니다. - 매우 편리하며 더 이상 백업을 위해 tar를 사용할 필요가 없습니다.

관련 정보