我有一个 cron 可以从临时文件中删除具有特定模式的所有文件。
find /tmp/* -type f -iname magick-* -exec rm {} \;
现在,我想在删除所有文件之前记录它们的统计信息以供将来分析。
我尝试执行以下操作,但如果搜索输出超过一个,则它不起作用。
find /tmp/* -type f -iname magick-* -exec stat {} \;
如何使其适用于多个结果,以及如何将其记录到文件中?
答案1
你不显示什么做当你尝试时就会发生。仅仅说“它不起作用”是永远不正确的。
我怀疑您的问题可能与以下一项或多项有关:
- 引用模式或转义
*
.如果不这样做,并且当前目录中有一个或多个文件与该模式匹配,则该模式将扩展到匹配文件列表并替换到您的命令中,即不是你想要什么。 - 不要用于
/tmp/*
find,只需使用/tmp
,find
它完全能够自行递归到给定目录;然后它还会查找名称以点开头的任何文件。
除此之外,如果rm
可行,那么stat
也应该可行。
另请注意,您可以将两者结合起来:
find /tmp -type f -iname 'magick-*' -exec stat {} \; -exec rm {} \;
首先stat
将执行,然后,如果stat
没有失败,rm
则执行。
find
您可以通过简单地将的输出重定向到您想要的任何文件来保存输出。
答案2
您可以一次性使用所有内容。也可以使用+
相反的方法,因为它会立即执行整个操作,因此速度会更快。
find /tmp -type f -iname 'magick-*'-exec stat {} + -exec sh -c 'rm -rf $@' _ {} + | tee -a log_to_file