현재 다음과 같이 로그 파일의 복사본을 만듭니다.
# tar -cvzf /var/www/vhosts/example.com/httpdocs/myfiles.tar.gz
/var/www/vhosts/example.com/logs/access_log
/var/www/vhosts/example.com/httpdocs/app/tmp/logs/error.log
/var/log/mysqld.log
/var/log/messages
/var/log/httpd/access_log
/var/log/httpd/suexec_log
/var/log/httpd/error_log
/var/log/sw-cp-server/error_log
/usr/local/psa/var/log/xferlog
/etc/php.ini
그러나 이렇게 하면 디렉토리 구조의 tar 파일이 생성됩니다. 폴더 구조를 피하기 위해서는 cd
모든 파일이 하위 폴더 없이 tar 파일로 저장되도록 파일별로 파일을 생성 해야 할 것 같습니다 . (tar.gz 파일에도 문제가 있는데, tar 명령은 파일이 압축된 경우 아카이브 파일 업데이트를 허용하지 않습니다.)
하지만 이 경우 이름이 같은 파일이 여러 개 있을 것입니다(예: access_log라는 파일 2개).
그래서 대상 로그 파일 이름을 변경해야 합니다.
예를 들어
/var/www/vhosts/example.com/logs/access_log to -var-www-vhosts-example.com-logs-access_log
/var/log/httpd/access_log to -var-log-httpd-access_log
디렉터리 구조와 파일 이름을 변경하지 않고 이러한 파일을 보관할 수 있습니까? 파일은 다른 폴더에 존재합니다.
답변1
GNU tar support --transform=expression
귀하의 경우에는 그렇습니다 --transform s,/,-,
(리딩이 없는 한 -
괜찮을 것 같습니다).
답변2
@Marks 답변에 추가
-T
명령 과 스위치를 사용하여 --transform
이를 수행 할 수 있습니다 tar
.
내 디렉토리 구조는 다음과 같습니다.
|-- foo1
| |-- file1.txt
| |-- file2.txt
| `-- file3.txt
|-- foo2
| |-- file4.txt
| |-- file5.txt
| `-- file6.txt
|-- foo3
| |-- file7.txt
| |-- file8.txt
| `-- file9.txt
`-- foo4
|-- file10.txt
|-- file11.txt
`-- file12.txt
디렉토리 이름이 포함된 파일을 압축할 수 있습니다.
$ find -type f | tar --transform="s,/,-,2" -czvf compress.tgz -T -
디렉터리 이름을 포함하지 않습니다.
$ find -type f | tar --transform="s,.*/,," -czvf compress.tgz -T -