我有一个嵌套的目录结构,如下所示:
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.txt
和z_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
^[a-m]
应该[^a-m]
。- 第一个字母后面可能还有文件名的其余部分,因此您需要
.*
后[^a-m]
,之前没有。 - 这些反斜杠是不需要的(但它们不会造成伤害)。
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]
)可能并非你所想的那样。