如何查找“查找”命令的多个单词?

如何查找“查找”命令的多个单词?
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): 两者logerrout
  • (...)?:一个可选的 ( ?) ......是:
  • \.[0-9]{4}-[0-9]{2}-[0-9]{2},又是一个文字.,后跟40-9 范围内的字符,这要归功于LC_ALL=C再次限制为 0123456789,后跟-,其中 2 个数字,-以及另外 2 个数字。

使用 BSD find,您可以使用-E选项而不是-regextype posix-extended谓词将参数-regex视为扩展正则表达式。

相关内容