폴더 구조 없이 여러 폴더의 여러 파일을 압축합니다.

폴더 구조 없이 여러 폴더의 여러 파일을 압축합니다.

현재 다음과 같이 로그 파일의 복사본을 만듭니다.

# 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 -

관련 정보