복사하지 않고 다른 디렉토리의 tar 파일 일반적으로 작업

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

사용자 디스크 할당량이 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.



답변

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를 사용하는 경우에도 항상 상대 경로를 사용하는 것이 좋습니다.


답변

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

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

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