백업 쉘 스크립트의 일부에 다음 명령이 있습니다.
tar -cjf site1.bz2 /var/www/site1/
아카이브의 내용을 나열하면 다음과 같은 결과가 나타납니다.
tar -tf site1.bz2
var/www/site1/style.css
var/www/site1/index.html
var/www/site1/page2.html
var/www/site1/page3.html
var/www/site1/images/img1.png
var/www/site1/images/img2.png
var/www/site1/subdir/index.html
그러나 /var/www/site1
추출을 단순화하고 쓸모없는 일정한 디렉토리 구조를 피하기 위해 아카이브 내의 디렉토리 및 파일 이름에서 부분을 제거하고 싶습니다 . 웹 데이터가에 저장되지 않은 장소에서 백업 된 웹 사이트를 추출 할 경우를 대비하여 모르십시오 /var/www
.
위의 예에서 다음을 원합니다.
tar -tf site1.bz2
style.css
index.html
page2.html
page3.html
images/img1.png
images/img2.png
subdir/index.html
따라서 추출 할 때 파일이 현재 디렉토리에서 추출되고 추출 된 파일을 나중에 이동할 필요가 없으므로 하위 디렉토리 구조가 유지됩니다.
stackoverflow
웹상의 다른 곳 에서 tar 및 백업에 대한 많은 질문이 이미 있지만 대부분은 전체 하위 디렉토리 구조를 삭제하거나 (평평하게) 또는 이름에 초기 /를 추가하거나 제거하도록 요청합니다 ( 추출 할 때 정확히 변경되는 것을 알지 못하지만 더 이상은 아닙니다.
여기 저기에서 찾은 솔루션 중 일부와 설명서를 읽은 후 시도했습니다.
tar -cjf site1.bz2 -C . /var/www/site1/
tar -cjf site1.bz2 -C / /var/www/site1/
tar -cjf site1.bz2 -C /var/www/site1/ /var/www/site1/
tar -cjf site1.bz2 --strip-components=3 /var/www/site1/
그러나 그들 중 누구도 내가 원하는 방식으로 일하지 않았습니다. 일부는 아무 것도하지 않고 일부는 더 이상 하위 디렉토리를 보관하지 않습니다.
그것은 Cron에 의해 시작 된 백업 쉘 스크립트 안에 있기 때문에 잘 모르겠습니다. 어떤 사용자가 그것을 실행하는지, 경로와 현재 디렉토리는 무엇이든, 항상 절대 경로를 쓰는 것이 모든 것에 필요하며 현재 디렉토리를 변경하지 않는 것을 선호합니다 스크립트에서 더 이상 무언가를 파괴하지 않기 위해 (웹 사이트뿐만 아니라 데이터베이스도 백업하고 FTP로 모든 것을 보내기 때문에)
이것을 달성하는 방법?
-C 옵션이 어떻게 작동하는지 오해 했습니까?
-C
경로를 교체 (또는 접두어하는 것은) 만 수행 할 수있는 반면 다만, "디렉토리 변경"를 의미한다 --transform
. 소총. superuser.com/questions/595510/prepend-prefix-in-tar/595512 -C (디렉토리 변경)를 간단하게하고 --transform 할 수 있습니다 :```tar cjf site1.bz2 --transform "s / ^ \. \ // $ targetbase / "-C / var / www / site1. ```