shell指令碼 檔案查詢之find命令

2022-03-19 00:11:23 字數 3569 閱讀 8172

首先是通過檔名稱來查詢,需要使用乙個-name引數。

查詢以  .txt結尾的檔案,和以 t 開頭的檔案:

ubuntu@ubuntu:~/test$ ls

one.txt three.txt two.txt

ubuntu@ubuntu:~/test$ find ./ -name '*.txt'

./two.txt

./one.txt

./three.txt

ubuntu@ubuntu:~/test$ find ./ -name 't*'

./two.txt

./three.txt

其中  ./ 表示當前目錄,後面還可以跟上一些簡單的正規表示式,如下面的例子,注意此時正規表示式需要使用引號括起來。

ubuntu@ubuntu:~/test$ touch 123.txt

ubuntu@ubuntu:~/test$ find ./ -name '[a-z]'* #以乙個字母開頭的檔案

./two.txt

./one.txt

./three.txt

ubuntu@ubuntu:~/test$ find ./ -name '[1-9]'* #以乙個數字1-9開頭的檔案

./123.txt

ubuntu@ubuntu:~/test$

可以通過許可權值來查詢,此時要使用-perm 引數

ubuntu@ubuntu:~/test$ ls -l

total 0

-rw-rw-r-- 1 ubuntu ubuntu 0 1月 20 21:24 123.txt

-rw-rw-r-- 1 ubuntu ubuntu 0 1月 20 21:18 one.txt

-rw-rw-r-- 1 ubuntu ubuntu 0 1月 20 21:18 three.txt

-rw-rw-r-- 1 ubuntu ubuntu 0 1月 20 21:18 two.txt

ubuntu@ubuntu:~/test$ chmod 777 one.txt

ubuntu@ubuntu:~/test$ find -perm 777

./one.txt

ubuntu@ubuntu:~/test$ find -perm 664

./two.txt

./three.txt

./123.txt

ubuntu@ubuntu:~/test$

還可以通過檔案型別來查詢,使用-type引數,其中f表示檔案,d表示目錄

ubuntu@ubuntu:~/test$ mkdir dirone

ubuntu@ubuntu:~/test$ ls -l

total 4

-rw-rw-r-- 1 ubuntu ubuntu 0 1月 20 21:24 123.txt

drwxrwxr-x 2 ubuntu ubuntu 4096 1月 20 21:37 dirone

-rwxrwxrwx 1 ubuntu ubuntu 0 1月 20 21:18 one.txt

-rw-rw-r-- 1 ubuntu ubuntu 0 1月 20 21:18 three.txt

-rw-rw-r-- 1 ubuntu ubuntu 0 1月 20 21:18 two.txt

ubuntu@ubuntu:~/test$ find ./ -type f

./two.txt

./one.txt

./three.txt

./123.txt

ubuntu@ubuntu:~/test$ find ./ -type d

././dirone

ubuntu@ubuntu:~/test$

可以根據檔案建立者查詢,使用-user引數

ubuntu@ubuntu:~/test$ ls -l

total 4

-rw-rw-r-- 1 ubuntu ubuntu 0 1月 20 21:24 123.txt

drwxrwxr-x 2 ubuntu ubuntu 4096 1月 20 21:37 dirone

-rwxrwxrwx 1 ubuntu ubuntu 0 1月 20 21:18 one.txt

-rw-r--r-- 1 root root 0 1月 20 21:42 roottouch

-rw-rw-r-- 1 ubuntu ubuntu 0 1月 20 21:18 three.txt

-rw-rw-r-- 1 ubuntu ubuntu 0 1月 20 21:18 two.txt

ubuntu@ubuntu:~/test$ find -user root

./roottouch

ubuntu@ubuntu:~/test$ find -user ubuntu

../two.txt

./one.txt

./three.txt

./123.txt

./dirone

ubuntu@ubuntu:~/test$

可以根據檔案更改時間來查詢,使用-mtime引數。 

find ./ -mtime -5   #查詢當前目錄下,5天以內更改過的檔案或者目錄

find ./ -mtime +3   #查詢當前目錄下,最後一次更改時間在3天以前的檔案

根據檔案大小來查詢,使用-size引數。注意如果要是用檔案區間,則每乙個檔案大小的前面都要加上-size引數,和mtime類似。還要注意的是,1兆位元組使用1m,不要使用1m

ubuntu@ubuntu:~/test$ ls -l

total 8

-rw-rw-r-- 1 ubuntu ubuntu 0 1月 20 21:24 123.txt

drwxrwxr-x 2 ubuntu ubuntu 4096 1月 20 21:37 dirone

-rwxrwxrwx 1 ubuntu ubuntu 15 1月 20 22:01 one.txt

-rw-r--r-- 1 root root 0 1月 20 21:42 roottouch

-rw-rw-r-- 1 ubuntu ubuntu 0 1月 20 21:18 three.txt

-rw-rw-r-- 1 ubuntu ubuntu 0 1月 20 21:18 two.txt

ubuntu@ubuntu:~/test$ find ./ -size -10c #小於10位元組的檔案

./two.txt

./roottouch

./three.txt

./123.txt

ubuntu@ubuntu:~/test$ find ./ -size +10c -size -20c #小於20位元組,大於10位元組的檔案

./one.txt

ubuntu@ubuntu:~/test$

find的這些引數是可以配合使用的,還可以使用xargs命令配合使用,將結果作為xargs後面命令的輸入。

shell指令碼檔案引數

本文編輯自 當我們我們向 指令碼檔案傳遞引數 可以通過 1,2 等特殊變數。很方便,但是有些限制,就是不能超過9個引數。通過使用 shift getopts 我們能更方便地提取引數。一 shift 通過使用 shift 我們將 shell指令碼檔案 的引數起點從左向右移。在shift命令中可以給乙個...

Shell指令碼檔案練習

使用if條件語句來判斷 media cdrom檔案是否存在,若存在就結束條件判斷和整個shell指令碼,反之則去建立這個目錄 vim mkcdrom.sh bin bash ping c 3 i 0.2 w 3 1 dev null if eq 0 then echo host 1 is on li...

shell指令碼設計之檔案查詢

判斷目錄 root mmm 下是否存在乙個名為1.c的檔案,如果存在,將它改名為111.c 如果不存在,顯示一行資訊 root mmm 1.c does not exit報告這個檔案不存在。在查詢存在的檔案 root mmm cba.c並將其改名為abc.c,儲存目錄保持不變。查詢不存在的檔案並提示...