根据文件名在 linux 文件系统上进行 RegEx 搜索

RegEx search on linux filesystem based on filenames

我尝试按照命令 find . | egrep -v '.*/[A-Z]{3}-[0-9]{8}-.' 递归搜索不在模式中的文件(不是文件夹)。这也显示文件夹!我错过了什么?

您可以直接使用 find-not 选项:

find . -type f -regextype posix-egrep -not -regex '.*/[A-Z]{3}-[0-9]{8}-[^/]*$' -exec basename {} \;

使用 GNU find,您可以使用

find . -type f -regextype posix-egrep -not -regex '.*/[A-Z]{3}-[0-9]{8}-[^/]*$' -printf "%f\n"

详情:

  • -type f - return 仅文件路径
  • -regextype posix-egrep 将正则表达式风格设置为 POSIX ERE
  • -not 反转正则表达式结果
  • .*/[A-Z]{3}-[0-9]{8}-[^/]*$ - 匹配文件名以三个大写字母 -、八位数字 - 开头的路径,然后可以包含 / 以外的任何文本,直到字符串的结尾
  • -exec basename {} \; / -printf "%f\n" 只打印没有文件夹的文件名(参见 Have Find print just the filenames, not full paths