Delete all files and directories but certain ones using Bash

后端 未结 3 1282
抹茶落季
抹茶落季 2020-12-30 07:23

I\'m writing a script that needs to erase everything from a directory except two directories, mysql and temp.

I\'ve tried this:

ls * | grep -v mysql         


        
3条回答
  •  伪装坚强ぢ
    2020-12-30 07:27

    You may try:

    rm -rf !(mysql|init)
    

    Which is POSIX defined:

     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.
    ...
    

    Note: Please, take time to test it first! Either create some test folder, or simply echo the parameter substitution, as duly noted by @mnagel:

    echo !(mysql|init)
    

    Adding useful information: if the matching is not active, you may to enable/disable it by using:

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

提交回复
热议问题