У меня есть серия файлов под названием:

2014111test.log
2014111test.log.stuff
2014111test.log.flibble
2014115test.log
2014115test.log.stuff
2014115test.log.flibble

Я хочу найти все файлы журнала за определенный возраст, затем tar.gz их вместе с любым другим файлом с той же начальной частью имени в архив.

$ find . -name '20*.log' -ctime +90 -exec 'tar zvcf /var/log/logzip/{}.tgz {}*' \;
find: tar zvcf /var/log/fwlogzip/./2014111test.log.tgz ./2014111test.log*: No such file or directory
...

Однако, если я наберу

tar zvcf /var/log/fwlogzip/./2014111test.log.tgz ./2014111test.log*

само по себе работает нормально. Таким образом, похоже, что с ошибками происходит что-то не так, когда команда find передает команду оболочке.

Что мне не хватает?

2 ответа2

0

Почему у вас есть кавычки вокруг вашей команды tar? Убей цитаты. Вы пытаетесь запустить команду:

tar zvcf /var/log/fwlogzip/./2014111test.log.tgz ./2014111test.log*

без аргументов

Помните, что в командах UNIX могут быть встроенные пробелы.

Я не могу проверить это, но:

find . -name '20*.log' -ctime +90 -exec tar zvcf /var/log/logzip/{}.tgz {}* \;

должно сработать.

0

Попробуйте один раз удалить кавычки вокруг команды tar, а также удалить * после {}, почему вы используете * после {}. Я проверил это работает нормально.

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