У меня две проблемы при работе с моими журналами и командой find.
sudo find /logs/ -type f -name '*.log' -mtime +0 | xargs ls -l
sudo find / logs / -type f -name '* .log' -mtime +0 | xargs gzip -9 *
Большинство примеров, которые я видел, включают заархивирование всех файлов в один архив, но я хочу, чтобы каждый по отдельности, и я хочу, чтобы они оставались в том же месте, где он их нашел.
Заранее спасибо.
2.
sudo find /logs/ -type f -name '*.log' -mtime +0 -exec gzip -9 {} \;
Однако, когда я добавляю +1 к mtime вместо +0, он выполняет только ls текущего каталога, в котором я нахожусь, при выполнении команды.
Ваш xargs
команда в этом примере странная:
sudo find /logs/ -type f -name '*.log' -mtime +0 | xargs ls -l
Если вы хотите вывести список файлов, просто используйте find
сам по себе, например:
sudo find /logs/ -type f -name '*.log' -mtime +0
Или:
sudo find /logs/ -type f -name '*.log' -mtime +1
Если эта команда выдаст ожидаемый список файлов, следующий шаг будет простым (см. Ниже). Если это find
команда не создайте список ожидаемых файлов, это говорит о том, что эти файлы действительно были изменены позже, чем вы думаете.
Вторая проблема, с которой я сталкиваюсь, - я хочу найти все журналы старше одного дня и заархивировать их по отдельности. Поэтому, если моя команда find находит 1-1-13.log, 1-2-13.log и 1-3-13.log, я хочу, чтобы каждый из них был преобразован в log.gz.
У вас проблема с командой xargs:
sudo find /logs/ -type f -name '*.log' -mtime +0 | xargs gzip -9 *
Вам нужно избавиться от этого *
в вашей команде xargs; вы ожидаете, что список файлов, переданных в gzip, поступит из find
команда, а не через подстановку оболочки. Так что это должно работать нормально:
find /logs -type f -name '*.log' | xargs gzip -9
Вы также можете сделать это, используя find ... -exec ...
, но это обычно менее эффективное решение.