next up previous contents
Next: 正規表示法 Up: 資料導向與管線處理 Previous: 管線命令 (pipe)   Contents

檔案的搜尋

  1. find:功能強大的檔案搜尋指令。
    [root@kvm7 ~]# find [PATH] [option] [action]
    參數:
    1. 與時間有關的參數:
       -atime n :在 n 天之前的『一天之內』被 access 過的檔案;
       -ctime n :在 n 天之前的『一天之內』被 change 過狀態的檔案;
       -mtime n :在 n 天之前的『一天之內』被 modification 過的檔案;
       -newer file :比檔案 file 還新的檔案。
    2. 與使用者或群組名稱有關的參數:
       -uid n :使用者的帳號 ID,UID=n 的檔案
       -gid n :群組名稱的 ID,GID=n 的檔案
       -user name :使用者帳號名稱為 name 的檔案
       -group name:群組名稱為 name 的檔案
       -nouser    :檔案的擁有者不存在的檔案
       -nogroup   :檔案的擁有群組不存在的檔案
    3. 與檔案權限及名稱有關的參數:
       -name filename:檔案名稱為 filename 的檔案;
       -size [+-]SIZE:比 SIZE 還要大(+)或小(-)的檔案。SIZE 的規格有:
                       c:byte, k:1024bytes。例如:-size +50k。
       -type TYPE    :檔案的類型為 TYPE 的檔案,類型主要有:一般正規檔案 (f),
                       裝置檔案 (b, c), 目錄 (d), 連結檔 (l), socket (s), 
                       及 FIFO (p) 等屬性。
       -perm mode  :檔案屬性『剛好等於』 mode 的檔案
       -perm -mode :檔案屬性『必須包含所有 mode 的屬性』的檔案,權限數值大於等於 mode。
       -perm +mode :檔案屬性『包含任一 mode 的屬性』的檔案,
                     例如:-perm +755(-rwxr-xr-x),包含屬性為 -rw------- 的檔案。
    4. 額外可進行的動作:
       -exec command :-exec 後再接指令 command 來處理搜尋的結果。
       -print        :將結果列印到螢幕上(預設動作)
    
  2. 先找出系統中屬於用戶 deyu3 的檔案,輸出除了標準輸出 (stdout) 及目錄外,還有標準錯誤 (stderr)。
    [root@kvm5 ~]# find / -user deyu3
    /home/deyu3
    /home/deyu3/.bashrc
    /home/deyu3/.bash_profile
    /home/deyu3/.bash_logout
    /var/spool/mail/deyu3
    find: ‘/proc/13708/task/13708/fd/6’: No such file or directory
    find: ‘/proc/13708/task/13708/fdinfo/6’: No such file or directory
    find: ‘/proc/13708/fd/6’: No such file or directory
    find: ‘/proc/13708/fdinfo/6’: No such file or directory
    
  3. 選項增加 type 指定 f,也就是一般檔案,每一參數都可以使用 [TAB] 提示或補齊,輸出已排除目錄。
    [root@kvm5 ~]# find / -user deyu3 -t
    -true  -type  
    [root@kvm5 ~]# find / -user deyu3 -type 
    b  c  d  f  l  p  s  
    [root@kvm5 ~]# find / -user deyu3 -type f
    /home/deyu3/.bashrc
    /home/deyu3/.bash_profile
    /home/deyu3/.bash_logout
    /var/spool/mail/deyu3
    find: ‘/proc/13726/task/13726/fdinfo/6’: No such file or directory
    find: ‘/proc/13726/fdinfo/6’: No such file or directory
    
  4. 將標準錯誤導向到 /dev/null,輸出已排除錯誤訊息。
    [root@kvm5 ~]# find / -user deyu3 -type f 2> /dev/n
    net/                network_throughput  nvram
    network_latency     null                
    [root@kvm5 ~]# find / -user deyu3 -type f 2> /dev/null 
    /home/deyu3/.bashrc
    /home/deyu3/.bash_profile
    /home/deyu3/.bash_logout
    /var/spool/mail/deyu3
    
  5. 建立要將檔案複製過去的目標目錄 /root/findresults。
    [root@kvm5 ~]# mkdir /root/findresults
    
  6. 使用管線命令及 xargs 將 find 命令的標準輸出一個一個送給 cp 命令做為標準輸入,複製到目標目錄 /root/findresults。
    [root@kvm5 ~]# find / -user deyu3 -type f 2> /dev/null | xargs cp -t /root/findresults/
    
  7. 查詢目標目錄 /root/findresults 內是不是有之前找到的那些檔案?
    [root@kvm5 ~]# ls -a /root/findresults/
    .  ..  .bash_logout  .bash_profile  .bashrc  deyu3
    


2018-04-11