1

Я использую эту команду для резервного копирования некоторых важных файлов конфигурации:

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

Когда я запускаю его, я получаю:

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

Кажется, я не могу использовать подстановочные знаки в путях.
Как я могу это исправить или обойти это?

Спасибо,
Дэн

4 ответа4

2

Вероятная проблема заключается в том, что вы не находитесь в корневом каталоге (/), но подстановочные знаки предполагают, что вы находитесь. Помните, что оболочка расширяет символы подстановки в командной строке перед вызовом программы. Таким образом, вы, etc/ssh/*, относитесь к вашему текущему рабочему каталогу, который, скорее всего, не существует. Вместо этого запустите (cd /; tar ... etc/ssh/* ...) .

1

Вы пропускаете / до начала имен. Оболочка будет отображать имена только в том случае, если они являются абсолютными путями Кроме того, если вы это сделаете, нет необходимости использовать -C .

1

Попробуйте сбросить * (или, возможно, /*).


Синтаксис остатка ...

Когда файл является путем к каталогу, действие применяется ко всем файлам и (рекурсивно) подкаталогам этого каталога.

http://www.computerhope.com/unix/utar.htm

0

ваша команда:

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

Вы делаете простую ошибку, как я в прошлом :)

  1. -C tar опция 'перемещает' только команду tar в '/', как и вы.
  2. Во-первых, это оболочка. Это расширяет звездочки, используя текущий каталог. Когда вы пишете /etc /*, это расширяет /etc /* для имен. Когда вы пишете etc /*, это начинается не с /root, а с текущего каталога. Вы можете исправить это добавление '/' или CD /. Тогда -С не нужен.
  3. Вы можете предотвратить расширение с помощью оболочки, используя обозначение 'etc /*'. Но tar будет использовать это «как есть». Если вы этого не хотите, используйте опцию --wildcards.
  4. Для чего вы используете «etc /*», вы можете просто использовать «etc /». Опция --recursion по умолчанию.

Смотри мужик смол. Но в старых системах это руководство неполное, поэтому используйте info tar.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .