shell命令查找文件的工具

2021-06-06

關鍵字:Shell具體應用


 

需求:在指定目錄中查找文件名包含指定字符的文件

- 支持自定義關鍵字查找

- 支持自定義查找路徑及查找關鍵字

 

使用方式:

假設這個工具的名稱爲:fgtool.sh (取意 shell tool for find and grep)。

直接運行此工具,將會打印Usage信息:

root@ubuntu:~# ./fgtool.sh 
you can search file by filter-keyword in current directory or a specify directory
Usage: fgtool.sh path_wanna_search filter_wanna_grep
   or:
       fgtool.sh filter_wanna_grep

 

在當前目錄下指定關鍵字查找:

root@ubuntu:~# ./fgtool.sh tool
fgtool.sh

 

指定目錄以及關鍵字查找:

root@ubuntu:~# ./fgtool.sh /etc host
host.conf
hostname
hosts
hosts.allow
hosts.deny

 

 

以下是此查找工具的源碼:

#!/bin/sh

SEARCH_PATH=.
FILTER=""
CAN_RUN=1
if [ $# = 1 ]; then
    FILTER=$1
    if [ "$FILTER" = "" ]; then
        FILTER=""
    fi
elif [ $# = 2 ]; then
    SEARCH_PATH=$1
    if [ "$SEARCH_PATH" = "" ]; then
        SEARCH_PATH=.
    fi
    FILTER=$2
    if [ "$FILTER" = "" ]; then
        FILTER=""
    fi
else
    echo "you can search file by filter-keyword in current directory or a specify directory"
    echo "Usage: fgtool.sh path_wanna_search filter_wanna_grep"
    echo "   or:"
    echo "       fgtool.sh filter_wanna_grep"
    echo ""
    CAN_RUN=0
fi

if [ $CAN_RUN = 1 ]; then
for filename in `ls -a $SEARCH_PATH`
do
if echo "$filename" | grep $FILTER
then
echo 0 > /dev/null
fi
done
fi

 

源碼前面首先定義了三個變量

1、查找的路徑及默認值。默認爲在當前目錄下查找;

2、過濾的關鍵字及默認值。默認值爲不過濾;

3、是否可以執行查找功能的標誌位;

 

接下來是對參數的判斷。

 

當沒有參數時,直接打印Usage信息並清除執行查找功能的標誌位。

 

當有一個參數時,將它識別成是過濾關鍵字。

 

當有兩個參數時,將第一個參數識別爲查找路徑,第二個參數識別爲過濾關鍵字。

 

另外,在對關鍵字賦值時還要判空,如果參數內容爲空時則用回默認值。(事實上這裏的判空沒有意義)

 

再下面就是執行查找功能了。

 

在一個for循環中逐個匹配。使用 ls -a 命令列出指定目錄下的所有文件。隨後通過 if + grep 組合語句來判斷是否符合條件。

 

這個 if + grep 組合語句是核心部分。當正在匹配的文件不滿足條件時,其結果是空值,即屏幕上不會有任何輸出。而當條件滿足時,屏幕上將會輸出此語句的執行結果,而執行結果即是將當前文件名打印出來。換句話說,在匹配條件的同時就已經決定了要不要將目標文件名打印出來了。因此,當 if 語句滿足時,就不應再二次打印文件名了。不過似乎shell不允許空的 if 語句存在,因此就加了一段無意義的 echo 0 > /dev/null 語句去湊數。

 

至此,便實現了我們的需求。

 

最後,其實這個小工具完全可以只使用一行命令來代替:

ls -a PATH | grep KEYWORD

 


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章