답변:
일반적으로이를 위해 -u 플래그를 사용합니다. tar의 매뉴얼 페이지에서 :
-u, --update only append files newer than copy in archive
따라서이 순서는 필요한 것을 수행합니다.
# First create the tar file. It has to be UNCOMPRESSED for -u to work
tar -cvf my.tar some-directory/
# ... update some files in some-directory
# ... add files in some-directory
# Now update only the changed and added files
tar -uvf my.tar some-directory/
# Compress if desired
gzip my.tar
좀 더 자세한 내용은 여기를 참조하십시오 : http://www.gnu.org/software/tar/manual/html_node/how-to-update.html
압축 된 TAR 아카이브 ( .tar.gz )를 한 번에 업데이트 할 수 없습니다 . 그러나 충분한 여유 공간이 있으면 다음을 수행 할 수 있습니다.
.tar.gz 파일에서 .tar 파일을 추출 하십시오.
gunzip filename.tar.gz
다음 명령으로 압축되지 않은 .tar 파일을 업데이트 하십시오 tar -u
.
tar -uf filename.tar new_file
업데이트 된 .tar 파일을 압축 하십시오.
gzip filename.tar
멀티 코어 CPU가있는 경우 .gz 파일 을 추출하고 생성 하는 pigz
대신 사용 하는 것이 좋습니다 . ( 의 멀티 스레드 구현입니다 )gzip
pigz
gzip
간단하게 교체 gzip
/ gunzip
명령에 pigz
/ unpigz
.
파일에서 특정 파일을 업데이트 *.tar.gz
하려면 다음을 수행하십시오.
파일을 사용할 수 vi
있는 곳에서 입력tar
/home>vi
예를 들어, 디렉토리 아래에있는 simple.tar.gz 를 수정 /home/test/
하려면 다음을 수행하십시오.
/home/test>vi
그리고 빈 편집기에서 Enter 키 :n simple.tar.gz
를 누르면 Enter
폴더 및 파일 목록이 나타납니다. u 커서를 수정하려는 위치로 커서를 이동하고를 클릭하십시오 Enter. vi
특정 파일 의 편집기 가 표시 됩니다. 그런 다음 i
파일을 변경하는 옵션입니다. 성공적인 변경 후. Esc키를 누르고 :wq
파일 쓰기 및 종료를 선택 하십시오. 그런 다음을 사용 :q
하여 파일 목록에서 나오십시오.
이 작업을 반복적으로 수행하려는 경우 최적화는 다음과 같습니다.
if [[ -f my.tar.gz ]]; then
if [[ ! -f my.tar ]]; then
echo 'No tar, unzipping tar.gz'
gunzip my.tar.gz
fi
tar -uvf my.tar file1 file2 file_new
gzip -fk my.tar # This keeps a copy of the tar.
# -f --force overwrite existing .tar.gz
# -k --keep Keep the input file (.tar file)
else
tar -cvzf my.tar.gz file1 file2
fi