find $path1 $path2 -regex '.*\(\.log\|\.err\|\.out\)' -mtime -10 -exec cp "{}" $destination \;
这是我在脚本中的命令,用于查找具有如上所示扩展名的文件名。这是成功的,直到我发现我的一些文件包含“filename.extension.date”,但我无法检索它。因此,我尝试错误(也使用 -iname 但我不明白)来查找我想要查找“单词/字符串”而不是扩展名的文件,以便我可以获得文件(filename.extension.date 和 filename.extension)。
答案1
.log
//如果你还想复制有多余的.err
文件.out
。日期后缀,并假设那些日期s 采用 YYYY-MM-DD 格式,并假设 GNU find
(正如您的正则表达式建议您正在使用的那样)和 GNU cp
,您会这样做
LC_ALL=C find "$path1" "$path2" \
-regextype posix-extended \
-regex '.*\.(log|err|out)(\.[0-9]{4}-[0-9]{2}-[0-9]{2})?' \
-type f \
-exec cp -t "$distination" {} +
替换[0-9]{4}-[0-9]{2}-[0-9]{2}
为[0-9]{8}
YYYYMMDD 日期等。
扩展.*\.(log|err|out)(\.[0-9]{4}-[0-9]{2}-[0-9]{2})?
正则表达式匹配:
.*
:任意数量 (*
) 的字符 (.
),这意味着LC_ALL=C
任何字节,这些字节不必在用户的区域设置中形成有效字符。其次是:\.
:文字.
(点/句点)。其次是:(log|err|out)
: 两者log
任err
一out
。(...)?
:一个可选的 (?
)...
,...
是:\.[0-9]{4}-[0-9]{2}-[0-9]{2}
,又是一个文字.
,后跟4
0-9 范围内的字符,这要归功于LC_ALL=C
再次限制为 0123456789,后跟-
,其中 2 个数字,-
以及另外 2 个数字。
使用 BSD find
,您可以使用-E
选项而不是-regextype posix-extended
谓词将参数-regex
视为扩展正则表达式。