Назад | Перейти на главную страницу

Поиск и архивирование файлов Linux

У меня две проблемы при работе с моими журналами и командой find.

  1. У меня проблемы с опцией mtime. Первая команда ниже показывает мне несколько файлов с 5 по 7 марта, как я считаю, это должно быть. Однако, когда я добавляю +1 к mtime вместо +0, он выполняет только ls текущего каталога, в котором я нахожусь, при выполнении команды. Он просто слушает мои каталоги в / home / user /. Не уверен, почему +1 его нарушает.
sudo find /logs/ -type f -name '*.log' -mtime +0 | xargs ls -l
  1. Вторая проблема, с которой я сталкиваюсь, - я хочу найти все журналы старше одного дня и заархивировать их по отдельности. Поэтому, если моя команда find находит 1-1-13.log, 1-2-13.log и 1-3-13.log, я хочу, чтобы каждый из них был преобразован в log.gz. Я попробовал это, выполнив следующую команду, но она не работает. Я предполагаю, что мне, возможно, придется сделать для этого небольшой сценарий bash, но я надеялся сделать это одной быстрой командой.

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 ..., но это обычно менее эффективное решение.