我有一个包含很多子目录的巨大目录。但是有些子目录的名字是number 或β 之类的奇怪字母或其他一些奇怪的东西。 该目录如下所示:
/
/a,/b,/1,/0,/$,/β
/a/c,/1/a,/b/β
目录的深度是3,我想删除所有目录中那些不在26个字母(a-z)
中的名字。 删除 ./1, ./$, ./β ...
和 /a/1,/b/β,/a/b/2
。
我尝试结合使用 find
和 grep
以及 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/