我正在开发 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
从正在检查的目录中剪切第一个文件(如果有)。