【发布时间】:2016-06-25 09:32:40
【问题描述】:
我有一个巨大的目录,其中包含很多子目录。但是有些子目录的名字是number或者像β这样的奇怪字母或者其他一些奇怪的东西。 目录如下所示:
/
/a,/b,/1,/0,/$,/β
/a/c,/1/a,/b/β
目录的深度是3,我想把那些不在26 letters (a-z)里的名字的目录全部删除。 Remove ./1, ./$, ./β ... 和 /a/1, /b/β, /a/b/2。
我尝试结合 find 和 grep 和 parallel (A gnu xargs)
grep 的作用很奇怪,如果我使用grep [a-z],它也会包含奇怪的字母,例如a with a circle on the top。
所以,我写这个:
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,我不想删除它们,但我认为根据正则表达式它不应该包含。
为什么会这样? 我怎样才能删除那些目录?
【问题讨论】:
-
至少管道是没用的,任何在[]里面的字符都会被接受。
-
这是因为
+搜索文字+符号。您的目录名称不包含+,因此grep -v允许它们全部通过。 -
我认为使用
\+会搜索文字+。