如何使用正则表达式查找来删除以特定字母开头的文件

如何使用正则表达式查找来删除以特定字母开头的文件

我有一个嵌套的目录结构,如下所示:

top_dir
└── nested_1
    └── nested_2
        ├── a_file.txt
        ├── b_file.txt
        ├── directory
        ├── other_directory
        ├── y_file.txt
        └── z_file.txt

nested_2我想删除里面不以 AM 开头的文件,保留目录不变。所以我想删除y_file.txtz_file.txt

我需要在 中运行 find + regex 命令top_dir

我尝试过多个版本:

find nested_1/nested_2 -maxdepth 1 -mindepth 1 -type f -regex "nested_1\/nested_2\/.*^[a-m]" #-delete

我使用什么正则表达式似乎并不重要 - 唯一产生结果的是

find nested_1/nested_2 -maxdepth 1 -mindepth 1 -type f -regex ".*" #-delete

它只是给我提供了目录中所有文件以及前导嵌套目录的列表(正如预期的那样)。

在 regexr 上测试它也没有帮助。

我在这里遗漏了什么?

答案1

  1. ^[a-m]应该[^a-m]
  2. 第一个字母后面可能还有文件名的其余部分,因此您需要.* [^a-m],之前没有。
  3. 这些反斜杠是不需要的(但它们不会造成伤害)。

find nested_1/nested_2 -maxdepth 1 -mindepth 1 -type f -regex "nested_1/nested_2/[^a-m].*" #-delete

笔记:

  • Linux 及其文件系统区分大小写。“不以 AM 开头”的内容将是[^A-M].*
  • 有时[^a-m](或[^A-M]可能并非你所想的那样

相关内容