压缩不同文件夹中的多个文件,无文件夹结构

压缩不同文件夹中的多个文件,无文件夹结构

目前,我创建了日志文件的副本,如下所示:

# 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 命令不允许更新存档文件)

但在这种情况下,将会有多个同名文件,例如 2 个名为 access_log 的文件。

所以我需要更改目标日志文件名。
例如

/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 支持--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 -

相关内容