regex - linux删除某个目录的方法

标签 regex linux bash

我有一个包含很多子目录的巨大目录。但是有些子目录的名字是numberβ 之类的奇怪字母或其他一些奇怪的东西。 该目录如下所示:

/
/a,/b,/1,/0,/$,/β
/a/c,/1/a,/b/β

目录的深度是3,我想删除所有目录中那些不在26个字母(a-z)中的名字。 删除 ./1, ./$, ./β .../a/1,/b/β,/a/b/2

我尝试结合使用 findgrep 以及 parallel (A gnu xargs) grep 工作起来很奇怪,如果我使用 grep [a-z],它还会包含奇怪的字母,例如,a 顶部有一个圆圈。 所以,我这样写:

find . -type d -maxdepth 2|grep -v  '\/[a|b|c|d|e|f|g|h|i|j|K|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z]+/[a|b|c|d|e|f|g|h|i|j|K|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z]+'|parallel -X -r rm -r

但它只是删除了所有文件! grep 输出包含 . 目录和子目录,如 /p 我不想删除,但我认为根据正则表达式它不应该包含。

为什么会这样? 我怎样才能删除这些目录?

最佳答案

find 本身可以使用正则表达式,为什么不用那个:

find . -maxdepth 2 -type d ! -iregex '.*/[a-z]+' -exec rm -r {} \;

注意事项:

  • -iregex :不区分大小写的正则表达式
  • -exec : 执行命令

关于regex - linux删除某个目录的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38026998/

相关文章:

bash - 使用 uuencode 和 mailx 发送电子邮件附件

bash - 运行 npm 命令时 -- 做什么?

c# - 正则表达式删除两个字符串之间的连字符

linux - 在 Linux 中删除文件名的 10 个字符

c - mremap "initialize"内存是否增长?

c++ - libpthread.so 在 `dlclose()` 之后继续使用 TLS 空间和 DL 命名空间

python - 检查字符串是否包含python中的特殊字符

c# - 如何使用 REGEX 将作者拆分为对象或数组 C#?

java - 使用正则表达式(全局)替换特定单词 - Java

在bash脚本中输入MySQL密码