Usando curingas com tar

1

Estou usando este comando para fazer backup de alguns arquivos de configuração importantes:

tar -czvf /var/backups/201102121202.tgz -C / etc/crontab etc/httpd/conf.d/* etc/httpd/conf/httpd.conf etc/httpd/passwords etc/httpd/vhost/* etc/php.ini etc/my.cnf etc/ssh/* etc/hosts etc/sysconfig/iptables var/spool/cron/* etc/passwd etc/group root/iptables_config etc/postfix/main.cf etc/postfix/master.cf etc/postfix/transport etc/postfix/valid_recipients etc/postfix/virtual etc/sysconfig/memcached etc/php.d/apc.ini etc/selinux/config etc/yum.repos.d/* etc/list_of_installed_packages.txt etc/safe-rm.conf home/*/.bash* home/*/.ssh usr/local/bin/* usr/local/sbin/* /etc/pki/tls/certs/mysite.com.crt /etc/pki/tls/private/mysite.key /etc/pki/tls/certs/gd_bundle.crt

Quando eu executo, recebo:

tar: etc/httpd/conf.d/*: Cannot stat: No such file or directory
tar: etc/httpd/vhost/*: Cannot stat: No such file or directory
tar: etc/ssh/*: Cannot stat: No such file or directory
tar: var/spool/cron/*: Cannot stat: No such file or directory
tar: etc/yum.repos.d/*: Cannot stat: No such file or directory
tar: home/*/.bash*: Cannot stat: No such file or directory
tar: home/*/.ssh: Cannot stat: No such file or directory
tar: usr/local/bin/*: Cannot stat: No such file or directory
tar: usr/local/sbin/*: Cannot stat: No such file or directory
tar: Removing leading '/' from member names
tar: Error exit delayed from previous errors

Parece que não posso usar curingas nos caminhos.
Como posso corrigir ou solucionar isso?

Obrigado,
Dan

    
por dan 16.02.2011 / 02:42

4 respostas

2

O provável problema é que você não está no diretório raiz (/), mas seus curingas assumem que você está. Lembre-se de que o shell expande curingas na linha de comando antes de envocar o programa. Então você etc / ssh / * é relativo ao seu diretório de trabalho atual, que provavelmente não existe. Execute (cd /; tar ... etc/ssh/* ...) em vez disso.

    
por 16.02.2011 / 02:49
1

Você está perdendo um / antes do início dos nomes. O shell só terá nomes de glob se forem caminhos absolutos. Além disso, se você fizer isso, não há necessidade de usar -C .

    
por 16.02.2011 / 02:47
1

Tente eliminar o * (ou talvez /*).

Sintaxe restante ...

Quando file é o nome do caminho de um diretório, a ação se aplica a todos os arquivos e subdiretórios (recursivamente) desse diretório.

link

    
por 16.02.2011 / 02:49
0

seu comando:

tar -czvf /var/backups/201102121202.tgz -C / etc/crontab etc/httpd/conf.d/* etc/httpd/conf/httpd.conf etc/httpd/passwords etc/httpd/vhost/* etc/php.ini etc/my.cnf etc/ssh/* etc/hosts etc/sysconfig/iptables var/spool/cron/* etc/passwd etc/group root/iptables_config etc/postfix/main.cf etc/postfix/master.cf etc/postfix/transport etc/postfix/valid_recipients etc/postfix/virtual etc/sysconfig/memcached etc/php.d/apc.ini etc/selinux/config etc/yum.repos.d/* etc/list_of_installed_packages.txt etc/safe-rm.conf home/*/.bash* home/*/.ssh usr/local/bin/* usr/local/sbin/* /etc/pki/tls/certs/mysite.com.crt /etc/pki/tls/private/mysite.key /etc/pki/tls/certs/gd_bundle.crt

Você comete um erro simples como eu no passado:)

  1. A opção -Ctar 'move' somente o comando tar para '/' como você faz.
  2. Primeiro é shell. Isso expande asteriscos usando o diretório atual. Quando você escreve / etc / *, isto expanda / etc / * para nomes. Quando você escreve etc / *, isso não começa a partir de / root, mas a partir do diretório atual. Você pode reparar isso adicionando '/' ou cd /. Então -C não é necessário.
  3. Você pode impedir a expansão pelo shell, usando a notação 'etc / *'. Mas o tar vai usar isso "como está". Se você não quiser, use a opção --wildcards.
  4. Para você usar 'etc / *', você pode usar simplesmente 'etc /'. opção - a repetição é padrão.

Veja tar man. Mas em sistemas mais antigos, este manual está incompleto, então use info tar.

    
por 02.01.2014 / 13:49

Tags