在Linux系統中,你想要查找在特定的目錄下是否有文件包含一個特定的單詞或者一串文本,通過下面這篇文章可以學習到如何查找Linux中的目錄並且找到包含想要查找文本的文件。
一個很簡單的方式就是使用grep命令,grep命令是一個強大有效可靠並且很流行的命令行工具,用於查找對應的數據包含文件或者目錄中在Linux環境中。
為了便於學習,我們准備了以下文件,具體想要查找以實際為准。
[root@localhost sharplee]# ls -l
total 40
-rw-r--r--. 1 root root 15606 Feb 26 10:12 jetty.sh
-rw-r--r--. 1 root root 0 Mar 2 09:06 myfile1
-rw-r--r--. 1 root root 0 Dec 10 2022 myfile2
-rw-r--r--. 1 root root 0 Dec 10 2022 myfile3
-rw-r--r--. 1 root root 0 Mar 2 09:35 myfile4
-rw-r--r--. 1 root root 0 Dec 10 2022 myfile6
-rw-r--r--. 1 root root 8 Mar 3 08:21 test
-rw-r--r--. 1 root root 28 Mar 6 08:52 test1.sh
-rw-r--r--. 1 root root 29 Mar 6 08:53 test2.sh
-rw-r--r--. 1 root root 11 Mar 6 08:53 test3.sh
-rw-r--r--. 1 root root 10 Mar 2 08:48 test.sh
-rw-r--r--. 1 root root 241 Mar 3 08:16 wcfile
查找包含cd單詞的文件
通過執行以下命令來查看Linux系統/home/sharplee/目錄下的文件中包含cd單詞的文件。
[root@localhost sharplee]# grep -Rwi /home/sharplee -e "cd"
/home/sharplee/jetty.sh:cd "$JETTY_HOME"
/home/sharplee/jetty.sh:cd "$JETTY_BASE"
/home/sharplee/jetty.sh: cd \"$JETTY_BASE\"
/home/sharplee/test1.sh:cd /home/
/home/sharplee/test1.sh:cd sharplee
/home/sharplee/test1.sh:cd ..
/home/sharplee/test2.sh:cd ..
/home/sharplee/test2.sh:cd /home/sharplee
/home/sharplee/test2.sh:cd ~
上面的命令參數的含義是 -R是用於遞歸子目錄,可以查詢當前目錄下的所有子目錄包含特定查找數據的目錄,-i的含義是不區分大小寫,-w(word)的含義是查找對應的單詞。單詞是什么,單詞就是有特殊符號分割的對應的字符串。
下面來看一下通過單詞查不到數據的例子。
[root@localhost sharplee]# grep -Rwi /home/sharplee -e "你好"
我們可以看出通過該命令啥也查不出來,但是這個目錄下的文件中卻有文件包含你好,下面打印的就是該文件中包含你好
[root@localhost sharplee]# cat wcfile
你好呀~歡迎觀看Linux教程
下面來看一下wc使用
wc 命令1
wc 命令2
wc command
wc cc
wc xxxxxxxxxxxxxxxxxxxxxxxxxxx
mm cccccccccccccccccccxx
啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦
llllllllllllllllllllllllll
通過上面查詢可以看出,確實包含有你好,為啥會查不到呢?其實剛才上面那個命令已經做了很好的解釋,grep 后面加了-w是用於查找對應的單詞的。單詞是啥就是上面說的,用特殊符號分割的。下面來看一下如何查到這個單詞。
[root@localhost sharplee]# grep -Rwi /home/sharplee -e "你好呀"
/home/sharplee/wcfile:你好呀~歡迎觀看Linux教程
[root@localhost sharplee]#
通過上面可以看出,grep 加了-w命令只能查到對應單詞的數據。那么如何查看包含該數據並且不是單詞的呢。
查找包含"你好"對應的文件
通過上面可以看出查找你好,加了-w是不能准確匹配到包含你好的文件,而是定位的是包含你好單詞的文件,接下來看一下如何查找對應的數據包含的文件,其實很簡單,就是把-w去掉,畢竟-w是用於查單詞的。
[root@localhost sharplee]# grep -Ri /home/sharplee -e "你好"
/home/sharplee/wcfile:你好呀~歡迎觀看Linux教程
[root@localhost sharplee]#
可以看出去掉-w之后,就可以查找包含相應關鍵的文件了。
查找包含"你好"對應的文件的行數
上面可以看到查詢到了對應的字符串包含的文件和目錄,但是不知道這個對應的字符串是在文件的哪個位置,為了很好的定位查到的數據,這個時候可以打印出文件對應數據的行數位置。
[root@localhost sharplee]# grep -Rin /home/sharplee -e "你好"
/home/sharplee/wcfile:1:你好呀~歡迎觀看Linux教程
[root@localhost sharplee]#
從上面執行的命令可以很快定位到查找的數據在對應的文件的第一行,就是綠色標准的地方,其實就是在命令行后面加了一個-n選項。
查找包含"cd"對應的特定后綴名的文件
可以看出上面命令都是查找對應目錄下的所有的文件,那么可不可以只查某些后綴名的文件呢,答案是肯定的,可以通過增加參數來控制只查找對應目錄下特定后綴的文件。
[root@localhost sharplee]# grep -Rin --include="*.sh" /home/sharplee -e "cd"
/home/sharplee/jetty.sh:250:cd "$JETTY_HOME"
/home/sharplee/jetty.sh:261:cd "$JETTY_BASE"
/home/sharplee/jetty.sh:487: cd \"$JETTY_BASE\"
/home/sharplee/test1.sh:1:cd /home/
/home/sharplee/test1.sh:2:cd sharplee
/home/sharplee/test1.sh:3:cd ..
/home/sharplee/test2.sh:1:cd ..
/home/sharplee/test2.sh:2:cd /home/sharplee
/home/sharplee/test2.sh:3:cd ~