How do I find all files that do not begin with a given prefix in bash?

前端 未结 6 2057
旧时难觅i
旧时难觅i 2020-12-19 12:42

I have a bunch of files in a folder:

foo_1 
foo_2
foo_3
bar_1
bar_2
buzz_1
...

I want to find all the files that do not st

相关标签:
6条回答
  • 2020-12-19 12:59

    Using bash and wildcards: ls [!bar_]*. There is a caveat: the order of the letters is not important, so rab_something.txt will not be listed.

    0 讨论(0)
  • 2020-12-19 13:04

    This should do the trick in any shell

    ls | grep -v '^prefix'
    

    The -v option inverts grep's search logic, making it filter out all matches. Using grep instead of find you can use powerful regular expressions instead of the limited glob patterns.

    0 讨论(0)
  • 2020-12-19 13:10

    With extended globs:

    shopt -s extglob
    ls !(bar_*) > filelist.txt
    

    The !(pattern) matches anything but pattern, so !(bar_*) is any filename that does not start with bar_.

    0 讨论(0)
  • 2020-12-19 13:17

    If you're doing subdirectories as well:

    find . ! -name "bar_*"
    

    Or, equivalently,

    find . -not -name "*bar_*"
    
    0 讨论(0)
  • 2020-12-19 13:21

    You want to find filenames not starting with bar_*?

    recursive:

    find ! -name 'bar_*' > Negatives.txt
    

    top directory:

    find -maxdepth 1 ! -name 'bar_*' > Negatives.txt
    
    0 讨论(0)
  • 2020-12-19 13:22

    In my case I had an extra requirement, the files must end with the .py extension. So I use:

    find . -name "*.py" | grep -v prefix_
    

    In your case, to just exclude files with prefix_:

    find . | grep -v prefix_
    

    Note that this includes all sub-directories. There are many ways to do this, but it can be easy to remember for those already familiar with find and grep -v which excludes results.

    0 讨论(0)
提交回复
热议问题