복사하지 않고 다른 디렉토리의 tar 파일


10

여기에있는 전문가에게는 매우 간단해야합니다.

사용자 디스크 할당량이 6GB에 불과한 Linux 계정이 있습니다. /opt압축시 1GB가 될 때 약 3GB의 데이터 가있는 일부 데이터 폴더가 있습니다. 안에 몇 가지 심볼릭 링크가 있습니다 data-folder. 일반적으로 작업 백업을 수행하기 위해 다음을 수행했습니다.

cp -rvfL /opt/data-folder ~/
cd ~/
tar -zcvf data-folder.tar.gz data-folder
rm -rvf data-folder

이제 사용자 디스크 할당량에서 이미 2.5GB를 사용했습니다. 파일을 집에 복사 할 공간이 충분하지만 tar다시는 사용할 수 없습니다 .

파이프를 사용하여 단일 명령으로 폴더를 tar하고 복사하는 방법이 있습니까?

추신 :에 /opt대한 읽기 권한 만 가지고 있기 때문에 tar 할 수 없습니다 /opt.


당신은 확실히 / opt에 tar를 넣을 수 있고, 거기에 수는 없습니다 . 그게 전부입니다. tar (3)에 대한 'f'플래그는 결과를 해당 파일에 저장하도록 지시합니다.이 파일은 다른 곳에있을 수 있습니다. 즉 cd /opt; tar zcf $HOME/junk.tar.gz junk.
vonbrand

답변:


5

tar 파일을 저장해야하는 곳에서 tar 파일을 작성 하시겠습니까?

이를 수행하는 방법에는 여러 가지가 있습니다.

로컬로 작성하려는 경우 (= 동일한 머신에서) :

tar czvf /path/to/destination/newfile.tar.gz  ./SOURCEDIR_OR_FILES

해당 명령의 끝에 tar에 추가 파일 또는 디렉토리를 추가 할 수 있습니다.

원격으로 작성하려는 경우 (즉, tar 할 데이터가 포함 된 원격 호스트에서 tar 파일을 작성하려는 경우) :

tar czvf - ./SOURCEDIR_OR_FILES | ssh user@host 'cat > newfile.tar.gz'

이후 버전은 매우 다양합니다. 예를 들어, 동일한 기술을 사용하여 디렉토리 + 하위 디렉토리를 "중복"할 수도 있습니다.

directory + subdirs를 다른 로컬 디렉토리에 복제하십시오.

tar cf - ./SOURCEDIR_OR_FILES | ( cd LOCAL_DEST_DIR && tar xvf - )

directory + subdirs를 다른 원격 디렉토리에 복제하십시오.

tar cvf - ./SOURCEDIR_OR_FILES | ssh user@host 'cd REMOTE_DEST_DIR && tar xf - '

파일이 tard (또는 tared) 된 상태에서 파일을 표시하는 데 필요하지 않은 경우 'v'를 삭제하십시오. 그러면 훨씬 더 빠르게 진행되지만 오류가 없으면 크게 말하지 않습니다.

소스가 tar를 상대 경로로 저장하도록하려면 ". / ..."을 사용합니다. 경우에 따라 추가 경로 정보를 추가하려고 할 수 있습니다.

예를 들어 / etc에있는 파일을 포함하여 crontab 파일을 tar하려면 다음을 수행하십시오.

cd / ; tar czf all_crons.tgz  ./etc/*cron*  ./var/spool/cron

나는 목적에 상대 경로를 사용 타르의 일부 이전 버전 당신이 할 수있는 의미, 원래 GLOBAL 경로로 위험하고 추출 파일이있을 수 있습니다 : cd /safedir ; tar xvf sometar및 / safedir의 외부에있는 원래의 경로에서 글로벌 이름 덮어 쓰기 파일과 파일이 그리고 그 아래가 아닙니다! 매우 위험하며 오래된 프로덕션 서버가 있으므로 여전히 가능합니다. 최신 tar를 사용하는 경우에도 항상 상대 경로를 사용하는 것이 좋습니다.


타르의 차이점에 대한 또 다른 내용 : 일부는 -cvf대신에 사용해야 할 수도 cvf있고 다른 -스타일 은 인식하지 못할 수도 있습니다. 그리고 z" '압축'으로 압축"을 의미하는 데 사용하지만, '최근'타르에는 "gzip으로 압축"을 의미한다. 다음을 사용하여 파일에서 어떤 압축이 사용되는지 알 수 있습니다 file zefile. 그리고 그에 따라 이름을 변경합니다 (타르의 사용은 경우에 compress, 더 나은하지 .tar.gz의는 .tar.Z 이름을 변경해야한다)
올리비에 Dulac

0

-htar 옵션을 사용하십시오 . 매뉴얼 페이지에서 :

-h, --dereference
don't archive symlinks; archive the files they point to

그래서 당신은 사용할 수 있습니다 tar -zcvfh data-folder.tar.gz /opt/data-folder


내가 언급 했어야했는데, 나는 이미 tar -zcvfh ~ / data-folder.tar.gz / opt / data-folder를 시도했다. 일종의 순환 아카이브 문제가 발생했습니다. 일부 파일을 계속 복사하고 끝나지 않습니다.
Kamath

데이터의 하위 폴더에 원형 심볼릭 링크가있는 것 같습니다.
Kamath

2
@AUZKamath, 이것은 GNU tar의 버그입니다. bsdtar대신 또는 루프를 감지하는 pax( cd /opt && pax -Lw data-folder | gzip > ~/data-folder.tar.gz) 시도해 볼 수 있습니다.
Stéphane Chazelas

1
@AUZKamath 홈 디렉토리에서 파일을 동시에 tar 및 제거하여 tar -rf <tarfilename> <filename>기존 tar 파일에 추가 할 수 있습니다.
harish.venkat

1
@ Stephane Chazelas, 그것은 대답으로 올려야 작동합니다.
Kamath
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.