我正在编写一个脚本,除了mysql和temp两个目录之外,它需要从一个目录中删除所有内容。
我试过这个:

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

但这也保留了所有以mysql命名的文件,我不需要这些文件。它也不会删除任何其他目录。
有什么想法吗?

最佳答案

您可以尝试:

rm -rf !(mysql|init)

也就是说:
 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)

POSIX defined:如果匹配未处于活动状态,您可以使用以下方法启用/禁用它:
shopt extglob                   # shows extglob status
shopt -s extglob                # enables extglob
shopt -u extglob                # disables extglob

07-24 18:08