Compactando vários arquivos em pastas diferentes sem estrutura de pastas

3

Atualmente, crio uma cópia dos meus arquivos de log assim:

# 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 

Mas isso cria um arquivo tar com a estrutura de diretórios. Para evitar a estrutura de pastas, parece que eu deveria fazer cd para cada arquivo, então todos os arquivos serão salvos no arquivo tar sem subpastas. (Também há um problema com os arquivos tar.gz, o comando tar não permite atualizar o arquivo archieve, se o arquivo estiver compactado)

Mas, nesse caso, haverá vários arquivos com o mesmo nome, por exemplo, 2 arquivos com nome access_log.

Portanto, preciso alterar o nome do arquivo de log de destino.
Por exemplo

/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

É possível arquivar esses arquivos sem a estrutura de diretório e com o nome do arquivo alterado? Observe que os arquivos existem em pastas diferentes.

    
por trante 08.01.2015 / 18:58

2 respostas

2

Adicionando a @Marks answer

Podemos fazer isso com a ajuda das opções -T e --transform do comando tar .

Eu tenho a estrutura de diretórios como abaixo.

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

Podemos tar os arquivos com o nome do diretório incluído

$ find -type f | tar --transform="s,/,-,2" -czvf compress.tgz -T -

E sem o nome do diretório incluído.

$ find -type f | tar --transform="s,.*/,," -czvf compress.tgz -T -
    
por 10.01.2015 / 07:04
1

O GNU tar suporta --transform=expression . No seu caso, seria --transform s,/,-, (exceto que não haveria nenhum líder - , que eu suspeito que estaria OK).

    
por 08.01.2015 / 20:30