我在处理日志和查找命令时遇到了两个问题。
- 我在使用 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 天的日志并将它们单独压缩。因此,如果我的 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 {} \;