Find all files matching 'name' on linux system, and search with them for 'text'

前端 未结 5 1518
猫巷女王i
猫巷女王i 2020-12-24 12:04

I need to find all instances of \'filename.ext\' on a linux system and see which ones contain the text \'lookingfor\'.

Is there a set of linux command line operation

5条回答
  •  清歌不尽
    2020-12-24 12:52

    find / -type f -name filename.ext -exec grep -l 'lookingfor' {} +
    

    Using a + to terminate the command is more efficient than \; because find sends a whole batch of files to grep instead of sending them one by one. This avoids a fork/exec for each single file which is found.

    A while ago I did some testing to compare the performance of xargs vs {} + vs {} \; and I found that {} + was faster. Here are some of my results:

    time find . -name "*20090430*" -exec touch {} +
    real    0m31.98s
    user    0m0.06s
    sys     0m0.49s
    
    time find . -name "*20090430*" | xargs touch
    real    1m8.81s
    user    0m0.13s
    sys     0m1.07s
    
    time find . -name "*20090430*" -exec touch {} \;
    real    1m42.53s
    user    0m0.17s
    sys     0m2.42s
    

提交回复
热议问题