나는 유닉스/리눅스에 대해 아무것도 모른다. 저는 주로 웹 프로그래머입니다.
내 코드에서 다음 명령을 실행합니다.
exec("tar -caf '/backups/_structure.tar.gz' --ignore-failed-read -C /source .");
이 코드는 내 디렉터리에 있는 모든 항목의 파일 백업을 만들고 /source
해당 디렉터리에 저장합니다 /backup
. 이 코드는 내 파일이 매우 큰 경우를 제외하고는 잘 작동합니다.
tar 파일을 100MB 세그먼트로 분할하고 싶습니다. 이를 수행하려면 이 줄에 무엇을 추가해야 합니까? 그것에 관한 내용을 읽었 | split -b 100MB
지만 어디에 넣어야 할지 모르겠습니다. 혼란스럽습니다.
답변1
tar -cf - --ignore-failed-read -C /source . | gzip |
split -b 100M - /backups/_structure.tar.gz.
요점 tar
은 임시 파일을 저장할 필요 없이 즉석에서 압축하고, 즉석에서 분할하고, 네트워크를 통해 전송할 수 있는 스트림을 보내는 것입니다.
-f -
tar
here 으로 파이프되는 stdout의 아카이브를 보내도록 지시 gzip
하고 즉시 압축하여 로 보냅니다 split
.
-
split
표준 입력에서 입력을 받도록 지시합니다 . 두 번째 매개변수는 블록 접두사입니다. 기본값이 마음에 들지 않으면 매뉴얼 페이지를 참조하여 split
이러한 블록의 명명 체계를 변경하는 방법을 알아보십시오.
다시 말하지만, 이 아카이브를 추출하려면 전체 파일을 저장할 필요가 없으며 tar.gz
다음을 사용하면 됩니다.
cat _structure.tar.gz.* | gunzip | (cd /dest && tar xf -)
답변2
먼저 tar 파일을 만듭니다.
tar -caf '/backups/_structure.tar.gz' --ignore-failed-read -C /source .
그런 다음 split
tar 파일 크기는 100Mbs입니다.
split -b 100M /backups/_structure.tar.gz
그러면 xaa, xab...와 같은 이상한 이름의 파일이 생성됩니다.
원본 파일을 다시 얻으려면 cat
다음 파일을 모두 가지고 있으면 됩니다.
cat xaa xab xac... > _structure.tar.gz