Linux 查找和压缩文件

Linux 查找和压缩文件

我在处理日志和查找命令时遇到了两个问题。

  1. 我在使用 mtime 选项时遇到了问题。下面的第一个命令显示了从 3 月 5 日到 3 月 7 日的几个文件,就像我认为的那样。但是,当我在 mtime 中添加 +1 而不是 +0 时,它只会对我运行命令时所在的当前目录执行 ls。它只是在监听 /home/user/ 下的目录。不知道为什么 +1 会破坏它。
sudo find /logs/ -type f -name '*.log' -mtime +0 | xargs ls -l
  1. 我遇到的第二个问题是我想找到所有超过 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*

我见过的大多数示例都涉及将所有文件压缩到 1 个档案中,但我希望每个文件都是单独的,并且希望它们留在找到它们的同一位置。

提前致谢。

答案1

但是,当我在 mtime 中添加 +1 而不是 +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命令才不是生成您期望的文件列表,这表明这些文件实际上比您想象的更近被修改。

我遇到的第二个问题是,我想找到所有超过 1 天的日志并将它们单独压缩。因此,如果我的 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,而不是通过 shell 通配符。因此这应该可以正常工作:

find /logs -type f -name '*.log' | xargs gzip -9

您也可以使用来执行此操作find ... -exec ...,但这通常是一种性能较差的解决方案。

答案2

2.

sudo find /logs/ -type f -name '*.log' -mtime +0 -exec gzip -9 {} \;

相关内容