Find count of files matching a pattern in a directory in linux

前端 未结 6 1333
面向向阳花
面向向阳花 2021-02-02 09:06

I am new to linux. I have a directory in linux with approx 250,000 files I need to find count of number of files matching a pattern.

I tried using following command :

6条回答
  •  余生分开走
    2021-02-02 09:41

    It might be better to use find for this:

    find . -name "pattern_*" -printf '.' | wc -l
    

    In your specific case:

    find . -maxdepth 1 -name "20061101-20131101_kh5x7tte9n_2010_*" -printf '.' | wc -m
    

    find will return a list of files matching the criteria. -maxdepth 1 will make the search to be done just in the path, no subdirectories (thanks Petesh!). -printf '.' will print a dot for every match, so that names with new lines won't make wc -m break.

    Then wc -m will indicate the number of characters which will match the number of files.


    Performance comparation of two possible options:

    Let's create 10 000 files with this pattern:

    $ for i in {1..10000}; do touch 20061101-20131101_kh5x7tte9n_201_$i; done
    

    And then compare the time it takes to get the result with ls -1 ... or find ...:

    $ time find . -maxdepth 1 -name "20061101-20131101_kh5x7tte9n_201_*" | wc -l
    10000
    
    real    0m0.034s
    user    0m0.017s
    sys     0m0.021s
    
    $ time ls -1 | grep 20061101-20131101_kh5x7tte9n_201 | wc -l
    10000
    
    real    0m0.254s
    user    0m0.245s
    sys     0m0.020s
    

    find is x5 times faster! But if we use ls -1f (thanks Petesh again!), then ls is even faster than find:

    $ time ls -1f | grep 20061101-20131101_kh5x7tte9n_201 | wc -l
    10000
    
    real    0m0.023s
    user    0m0.020s
    sys     0m0.012s
    

提交回复
热议问题