递归地仅查找所有子文件夹中的最新日志并保存到文件

递归地仅查找所有子文件夹中的最新日志并保存到文件

我正在开发 RHEL7 机器。我需要递归地查找特定层次结构下每个子文件夹中的所有最新(且仅最新).log 文件,并在文件“all_logs.txt”中列出它们的完整路径。

我的 find 命令如下所示,可返回约 6000 条记录的完整路径:

cd ${SEARCHDIR}
find . -iname computer_import_*.log > all_logs.txt

这里的问题是这个 find 命令正在查找 ALL computer_import_.log 我只需要最新的computer_import_搜索的每个子文件夹中的 .log 文件。

答案1

我尝试使用下面的命令,效果很好

find . -type f -iname "computer_import_*.log" -daystart -mtime -1 > all_logs.txt

答案2

find ${SEARCHDIR} -type f -iname "computer_import_*.log" -mtime -10 > all_logs.txt

这将找到与-iname参数匹配的所有文件,仅限于运行后 10 天内修改。find有关更多详细信息,请参阅联机帮助页。

请注意,-iname参数被引用,以便在运行find之前解释参数而不是 shell 。find

如果您想查看根据这些条件返回的内容,例如:

find ${SEARCHDIR} -type f -iname "computer_import_*.log" -mtime -10 -exec ls -ld {} +

这将对返回的每个文件执行ls,从而显示最后修改日期。-mtime <+-N>根据您的喜好更改 的值。值-90将返回过去 90 天内修改的文件。正值+90将返回 90 天前修改的文件。

** 另类解释 **

鉴于要求找到仅有的最新的文件在任何全部子目录,执行如下操作:

find ${SEARCHDIR} -type d > /var/tmp/mydirs
while read -r line
do
    ls -alt "${line}" | grep -Ev "^(d|total)" | head -1 >> /var/tmp/mylogs
done < /var/tmp/mydirs

ls按最新到最旧的修改日期对目录内容进行排序。消除grep了目录条目和总大小行。 head从正在检查的目录中剪切第一个文件(如果有)。

相关内容