击。 删除所有文件和目录,但某些

我正在写一个脚本,需要擦除除了两个目录,mysql和temp之外的所有目录。

我试过这个:

ls * | grep -v mysql | grep -v temp | xargs rm -rf 

但是这也保留了所有在他们的名字有mysql的文件,我不需要。 它也不会删除任何其他目录。

有任何想法吗?

你可以尝试:

 rm -rf !(mysql|init) 

POSIX定义的是 :

  Glob patterns can also contain pattern lists. A pattern list is a sequence of one or more patterns separated by either | or &. ... The following list describes valid sub-patterns. ... !(pattern-list): Matches any string that does not match the specified pattern-list. ... 

注意 :请花点时间先测试一下! 要么创建一些测试文件夹,要么直接echo显参数替换,正如@mnagel所指出的那样:

 echo !(mysql|init) 

添加有用的信息 :如果匹配不活跃 ,您可以使用以下命令启用/禁用它:

 shopt extglob # shows extglob status shopt -s extglob # enables extglob shopt -u extglob # disables extglob 

这通常是find的工作。 尝试以下命令(如果需要递归删除,请添加-rf ):

 find . -maxdepth 1 \! \( -name mysql -o -name temp \) -exec rm '{}' \; 

(也就是查找不是[命名为mysql或命名为tmp ]的子目录,而是在其上调用rm

你可以使用find,忽略mysql和temp,然后rm -rf。

 find . ! -iname mysql ! -iname temp -exec rm -rf {} \;