여기 전문가에게는 이 작업이 쉬울 것입니다.
사용자 디스크 할당량이 6GB에 불과한 Linux 계정이 있습니다. 일부 데이터 폴더에는 /opt
약 3GB의 데이터가 포함되어 있으며 최대 1GB까지 압축할 수 있습니다. 내부에는 몇 가지 심볼릭 링크가 있습니다 data-folder
. 일반적으로 작업을 백업하기 위해 다음과 같은 작업을 자주 수행합니다.
cp -rvfL /opt/data-folder ~/
cd ~/
tar -zcvf data-folder.tar.gz data-folder
rm -rvf data-folder
이제 내 사용자 디스크 할당량 중 2.5GB가 소모되었으므로 집에 파일을 복사할 공간만 남고 더 이상은 없습니다 tar
.
예를 들어 파이프를 사용하여 단일 명령으로 폴더를 압축하고 복사하는 방법이 있습니까?
/opt
추신: 읽기 권한만 있기 때문에 압축할 수 없습니다 /opt
.
답변1
tar 파일이 필요한 곳에서 멀리 떨어진 위치에 tar 파일을 생성하시겠습니까?
이를 수행하는 방법에는 여러 가지가 있습니다.
로컬로 생성하려면(=동일한 머신에서):
tar czvf /path/to/destination/newfile.tar.gz ./SOURCEDIR_OR_FILES
명령 끝에서 tar에 추가 파일이나 디렉터리를 추가할 수 있습니다.
원격으로 생성하려는 경우(즉, 무게 측정하려는 데이터가 포함된 호스트에서 원격 호스트에 tar 파일을 생성하려는 경우):
tar czvf - ./SOURCEDIR_OR_FILES | ssh user@host 'cat > newfile.tar.gz'
이후 버전은 매우 다재다능했습니다. 예를 들어, 동일한 기술을 사용하여 디렉터리 + 하위 디렉터리를 "복사"할 수도 있습니다.
디렉터리 + 하위 디렉터리를 다른 로컬 디렉터리로 복사합니다.
tar cf - ./SOURCEDIR_OR_FILES | ( cd LOCAL_DEST_DIR && tar xvf - )
디렉터리 + 하위 디렉터리를 다른 원격 디렉터리로 복사합니다.
tar cvf - ./SOURCEDIR_OR_FILES | ssh user@host 'cd REMOTE_DEST_DIR && tar xf - '
압축된(또는 압축되지 않은) 파일을 표시하는 데 필요하지 않은 경우 "v"를 제거하십시오. 이렇게 하면 더 빠르게 실행되지만 오류가 발생하지 않는 한 많은 내용을 알 수 없습니다.
나는 "./..."를 소스로 사용하여 tar를 상대 경로로 저장하도록 했습니다. 경우에 따라 추가 경로 정보를 추가해야 합니다.
예를 들어, crontab 파일(/etc의 파일 포함)을 압축하려면 다음을 수행할 수 있습니다.
cd / ; tar czf all_crons.tgz ./etc/*cron* ./var/spool/cron
의도적으로 상대 경로를 사용하고 있습니다. 일부 이전 버전의 tar는 위험할 수 있으며 원래 전역 경로를 사용하여 파일을 추출합니다. 즉, 다음을 수행할 수 있습니다. cd /safedir ; tar xvf sometar
전역 이름을 가진 파일이 원래 경로( /safedir 외부에 있음)를 덮어쓰도록 합니다. 그 밑에 대신! 매우 위험하지만 오래된 프로덕션 서버가 있기 때문에 여전히 가능합니다. 최신 tar를 사용하더라도 항상 상대 경로를 사용하는 것이 가장 좋습니다.
답변2
-h
tar 옵션을 사용하십시오 . 매뉴얼 페이지에서:
-h, --dereference
don't archive symlinks; archive the files they point to
그래서 당신은 사용할 수 있습니다tar -zcvfh data-folder.tar.gz /opt/data-folder