노트:

노트:

좋은 아침이에요,

tar 압축 아카이브 tar.bzip2가 있습니다(다음을 tar jcf사용하여 생성됨).데이터.txt (1). 반면에 이름이 다른 파일도 있습니다.데이터.txt (2).

파일을 추가하는 방법이 있나요?(2)파일 끝까지(1)bz2 아카이브의 압축을 풀고 파일을 추가한 다음 다시 복원하지 않습니까?
그건 그렇고, 나는 이 세 단계를 수행했습니다. 단지 호기심으로(또는 "out of 호기심"...영어로 이 표현이 확실하지 않음) 해서 한 것입니다.

올바른 옵션을 찾고 있었지만 찾을 수 없습니다.

  • -r옵션에 "중단"이 표시됩니다. 아카이브에 이미 존재하는 파일을 추가하려고 하기 때문인 것 같습니다.
  • -u대체할 것이라고 생각했지만 압축된 아카이브를 업데이트할 수 없습니다.(1)통과(2).
  • -A또한 "중단"하라고 말했습니다. 이 옵션의 기능이 무엇인지 잘 모르겠습니다. 한 아카이브의 파일을 다른 기존 아카이브에 추가하는 것 같습니다. 그래서 이것은 내가 원하는 것이 아닙니다.

저는 Linux에서 GNU tar 1.15.1을 사용하고 있습니다.

노트:

제가 충분히 설명하지 못한 것 같아서 예를 하나 들어보겠습니다
.데이터.tar.bz2이라는 파일이 포함되어 있습니다.데이터.txt (1). 그 내용은 다음과 같습니다.

이름이 다른 파일도 있습니다데이터.txt (2). 그 내용은 다음과 같습니다.

두번째

내 의도는데이터.tar.bz2둘 다(1)그리고(2)물론 파일 내용은 다음과 같은 파일에 있습니다.데이터.txt:


A와 B

즉, 압축을 풀고, 압축을 풀고, 임시 디렉터리를 만드는 등의 작업을 할 필요 없이 하나의 명령으로 수행합니다.

mkdir $tempDir
tar jxf data.tar.bz2 -C $tempDir
cat data.txt >> $tempDir/data.txt
tar jcf data.tar.bz2 -C $tempDir data.txt 
rm -r $tempDir 

예, 추가하고 싶지만 -r해당 옵션이 작동하지 않습니다. 기억이 정확하다면 파일을 아카이브에 추가하지만 아카이브에 있는 기존 파일의 내용은 추가하지 않기 때문입니다. 이것이 명확해지기를 바랍니다...전혀 모르겠습니다 xD

답변1

data.txttar 아카이브의 유일한 파일인 경우 직접 추가할 수 있지만 tar전혀 사용하지 마세요.

$ echo Hello | bzip2 > data.txt.bz2
$ echo Stack | bzip2 >> data.txt.bz2
$ echo Exchange | bzip2 >> data.txt.bz2
$ bunzip2 < data.txt.bz2
Hello
Stack
Exchange

답변2

스위치를 사용하여 압축되지 않은 tar 아카이브에 파일을 추가할 수 있습니다 --append. 예를 들면 다음과 같습니다.

$ tar --append --file=tarfile.tar data.txt

기존 아카이브에 이름이 같은 여러 파일을 추가하면 어떤 결과가 발생하는지 참고하세요.

http://www.gnu.org/software/tar/manual/html_node/append.html

내가 아는 한, 압축된 아카이브에 있는 파일의 압축을 먼저 풀지 않으면 파일을 추가하거나 업데이트할 수 없습니다.

답변3

이 작업을 수행하려면 Archivemount 유틸리티만 생각할 수 있습니다.

1) 설치합니다 archivemount(컴퓨터에 아직 설치되지 않은 경우). EPEL 저장소에서 찾을 수 있습니다.

2) 이 archivemount명령을 사용하여 tar 파일을 컴퓨터의 임의 디렉터리에 마운트합니다.

archivemount xyz.bzip2 /path/to/a/directory/

일단 설치되면 일반 디렉토리인 것처럼 아카이브를 찾아볼 수 있습니다. 여기에서 아카이브의 파일에 콘텐츠를 편집/업데이트하거나 추가할 수 있습니다.

여기사용법에 대한 자세한 내용은 다음과 같습니다. 아래는 archivemountbzip2 파일을 편집할 때 내 서버에서 가져온 조각입니다.archivemount

[root@server usr]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/xvda1       15G  9.0G  5.1G  64% /
none            245M     0  245M   0% /dev/shm
[root@server usr]# archivemount puppet_codes.bzip2 /usr/local/archtest/
[root@server usr]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/xvda1       15G  9.0G  5.1G  64% /
none            245M     0  245M   0% /dev/shm
archivemount   1000G     0 1000G   0% /usr/local/archtest
[root@server usr]# ls /usr/local/archtest
puppet_codes
[root@server usr]# cat /usr/local/archtest/puppet_codes/emaillist.txt
[email protected]
[email protected]
[root@server usr]#

아래는 제가 서버에 설치한 패키지입니다.

[root@server ~]# rpm -qi archivemount-0.8.1-2.el6.x86_64
Name        : archivemount                 Relocations: (not relocatable)
Version     : 0.8.1                             Vendor: Fedora Project
Release     : 2.el6                         Build Date: Sun Oct 13 17:06:30 2013
Install Date: Wed Dec 17 13:45:01 2014         Build Host: buildvm-04.phx2.fedoraproject.org
Group       : System Environment/Libraries   Source RPM: archivemount-0.8.1-2.el6.src.rpm
Size        : 70774                            License: LGPLv2+
Signature   : RSA/8, Sun Oct 13 18:43:34 2013, Key ID 3b49df2a0608b895
Packager    : Fedora Project
URL         : http://www.cybernoia.de/software/archivemount/
Summary     : FUSE based filesystem for mounting compressed archives
Description :
Archivemount is a piece of glue code between libarchive and FUSE. It can be
used to mount a (possibly compressed) archive (as in .tar.gz or .tar.bz2)
and use it like an ordinary filesystem.

관련 정보