需要在所有系统中查找少于 7 天、以“L”开头且为 .txt 的文件,然后根据该文件生成输出文件

需要在所有系统中查找少于 7 天、以“L”开头且为 .txt 的文件,然后根据该文件生成输出文件

我正在使用 Ubuntu,需要在所有系统文件中查找少于 7 天、以 开头L且为 的文件.txt,然后基于此生成输出文件。

这是我目前所拥有的:

nohup find / -type f -ctime -7 -name \*.txt \*L | tee /tmp/log``-`hostname`-`date -I`.log

但不知何故输出是

find: paths must precede expression: `*L'

我尝试了很多方法将其放入L脚本中。如何才能让它正常工作?


这是已删除其他用户的问题。我当时正在发布答案,他们突然删除了这个问题,因此我在这里重新发布,以便与其他人分享我的解决方案。

答案1

这在 Ubuntu 16.04 上有效;因为它使用 GNU,所以也应该可以在其他版本上运行find

find / -type f -ctime -7 -regextype posix-extended -regex ".*\/L.[a-zA-Z]+.(txt)$"  -print 2>/dev/null |\
  while read filepath
  do
    echo "${filepath}" >> log-$(hostname)-$(date +"%Y-%m-%d").log
  done

请注意-regextype posix-extended-iregex其后跟的正则表达式模式。

并且 — — 对于其他可能偶然发现这一点的人来说 — — 该脚本的这个变体适用于使用 BSD 的 macOS Catalina (10.5.7) find

find -E / -type f -ctime -7 -regex ".*\/L.[a-zA-Z]+.(txt)$"  -print 2>/dev/null |\
  while read filepath
  do
    echo "${filepath}" >> log-$(hostname)-$(date +"%Y-%m-%d").log
  done

注意-E(解释正则表达式模式)和-iregex(不区分大小写)正则表达式模式。

我更喜欢这种 regex-bass 方法,因为我可以改变正则表达式模式以具有多个文件扩展名,例如这样查找带有.txt.jpegpng扩展名的文件:

 ".*\.(txt|jpeg|png)$"

相关内容