tar unix não está mudando de diretório

2

Estou executando um comando tar para compactar arquivos que estão presentes em outro diretório.

Eu executei o seguinte comando:

tar -czf /backupmnt/abc.tar.gz -C /backupmnt/statusService/ *

Eu quero criar o arquivo abc.tar.gz em /backupmnt , que deve incluir todos os arquivos no diretório /backupmnt/statusService/ , mas estou ficando abaixo do erro:

tar: components: Cannot stat: No such file or directory
tar: Exiting with failure status due to previous errors

components está presente no diretório atual de onde estou executando o comando. Abaixo estão os conteúdos de /backupmnt/statusService

SS-01:/ # ls /backupmnt/statusService
MJ.netact.xml.tar.gz      gmoTemp_fm.tar.gz  mr.properties.tar.gz  probe.properties.tar.gz  relay_logs.tar.gz  ss_logs.tar.gz  tomcat_conf.tar.gz
esymac_config.txt.tar.gz  gmoTemp_pm.tar.gz  o2ml.tar.gz           probes_logs.tar.gz       ss_conf.tar.gz     ss_pm.tar.gz    tomcat_logs.tar.gz

Não consigo chegar onde estou errado.

    
por pankaj_ar 28.04.2015 / 07:56

3 respostas

6

* é expandido pelo shell antes que tar seja executado. Portanto, fazer tar alterar o diretório invalida os argumentos em que * foi expandido. Você pode simplesmente dizer tar para compactar o diretório:

tar -czf /backupmnt/abc.tar.gz -C /backupmnt/statusService/ .

O . representa o diretório atual, que será alterado quando tar alterar os diretórios. Isso resultará na inclusão de arquivos ocultos (aqueles que começam com . ) no arquivo.

    
por 28.04.2015 / 08:02
2

Por que não usar a alteração explícita do diretório?

cd /backupmnt/statusService && tar -czf /backupmnt/abc.tar.gz *

Ou você pode usar caminhos relativos:

cd /
tar -czf /backupmnt/abc.tar.gz backupmnt/statusService1/* backupmnt/statusService2/* backupmnt/statusService3/*

O que pode ser uma solução ainda melhor, pois você manterá os arquivos separados em pastas e evitará sobrescrever os nomes de arquivos duplicados

    
por 28.04.2015 / 08:49
0

-C não é uma opção portátil de qualquer maneira. É uma opção GNU e não UNIX.

tar não é mais especificado pela especificação Single UNIX, pois há muita diferença entre as implementações. Tem pax para criar arquivos de forma portável.

Você poderia fazer:

pax -ws '|.*//||' /backupmnt/statusService//. /some/other/dir//./*.ext |
  xz > file.tar.xz

( xz / gzip não são especificados por POSIX).

Isso é usar //. para marcar qual parte dos caminhos deve ser removida.

    
por 28.04.2015 / 13:45