我正在使用 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
、.jpeg
和png
扩展名的文件:
".*\.(txt|jpeg|png)$"