1. 程式人生 > >CenOS 檔案搜尋find

CenOS 檔案搜尋find

1、檔案搜尋,內建的的命令是find

用法: find [查詢路徑] 尋找條件 操作

預設路徑為當前目錄;預設表示式為 -print

2、主要引數:

-name  匹配名稱 
-perm  匹配許可權(mode為完全匹配,-mode 為包含即可) 
-user   匹配所有者 
-group  匹配所有組 
-mtime -n +n  匹配修改內容的時間(-n指 n天以內,+n指 n天以前) 
-atime -n +n  匹配訪問檔案的時間(-n指 n天以內,+n指 n天以前) 
-ctime -n +n  匹配修改檔案許可權的時間(-n指 n天以內,+n指 n天以前) 
-nouser  匹配無所有者的檔案 
-nogroup  匹配無所有組的檔案 
-newer f1 !f2  匹配比檔案 f1新但比 f2舊的檔案 
--type b/d/c/p/l/f 匹配檔案型別(後面的字母引數依次表示塊裝置、目錄、字元道、連結檔案、文字檔案) 
-size 匹配檔案的大小(+50KB 為查詢超過 50KB 的檔案,而-50KB小於50KB的檔案) 
-prune  忽略某個目錄 
-exec …… {}\;  find命令對匹配的檔案執行該引數所給出的shell命令。相應命令的形式為'command' { } \;,注意{ }和\;之間的空格,{}表示查找出來的沒一個檔案,結尾必須是"\;"

3、按名字查詢

在/opt目錄下查詢elasticsearch的配置檔案
[[email protected] ~]# find /opt -name "elastic*.yml" /opt/elasticsearch-6.5.1/config/elasticsearch.yml

查詢過程中出現“許可權不夠”的提示:
[[email protected] ~]$ find /opt -name "elastic*.yml"
find: ‘/opt/modules/hadoop-3.1.0/logs/userlogs/application_1527345950418_0001_DEL_1527434392341’: 許可權不夠
find: ‘/opt/data/tmp/dfs/data’: 許可權不夠
find: ‘/opt/data/tmp/nm-local-dir/usercache_DEL_1527434391968/root’: 許可權不夠
find: ‘/opt/data/tmp/nm-local-dir/nmPrivate’: 許可權不夠
find: ‘/opt/data/tmp/nm-local-dir/usercache/hadoop’: 許可權不夠
/opt/elasticsearch-6.5.1/config/elasticsearch.yml

避免因為許可權不夠的提示,把查詢錯誤提示轉移到特定的目錄中去。
[[email protected] ~]$ find /opt -name "elastic*.yml" 2> /dev/null
/opt/elasticsearch-6.5.1/config/elasticsearch.yml

4、按檔案大小查詢

查詢/home下大於10M的檔案
[[email protected] ~]# find /home -size +10M /home/data/kafka_2.12-2.0.0.tgz
查詢小於1k的檔案
[[email protected] ~]# find /home -size -1k

5、與,或條件,and,or

[[email protected] ~]# find /opt -name "*yml" -and -name "elastic*"
/opt/elasticsearch-6.5.1/config/elasticsearch.yml

find / -user fred -or -user georg

6、其他

  find / -amin -10 # 查詢在系統中最後10分鐘訪問的檔案
  find / -atime -2 # 查詢在系統中最後48小時訪問的檔案
  find / -empty # 查詢在系統中為空的檔案或者資料夾
  find / -group cat # 查詢在系統中屬於 groupcat的檔案
  find / -mmin -5 # 查詢在系統中最後5分鐘裡修改過的檔案
  find / -mtime -1 #查詢在系統中最後24小時裡修改過的檔案
  find / -nouser #查詢在系統中屬於作廢使用者的檔案
  find / -user fred #查詢在系統中屬於FRED這個使用者的檔案

在find命令中還可以使用“非”的關係來查詢檔案,如果我們要在/tmp目錄中查詢所有不屬於panda的檔案,使用一個簡單的
  find /tmp ! -user panda

  查詢並顯示檔案的方法
find / -name "httpd.conf" -ls

find   .   -perm -007   -exec ls -l {} \;   #查所有使用者都可讀寫執行的檔案同-perm 777
find   .   -name   "[a-z][a-z][0–9][0–9].txt"    -print   #查以兩個小寫字母和兩個數字開頭的txt檔案
find   /home   -uid   +501                  列出/home目錄內使用者的識別碼大於501的檔案或目錄
find   /home   -gid 501                   列出/home內組id為501的檔案或目錄

7、exec引數,{}表示查找出來的沒一個檔案,結尾必須是"\;"

在/opt目錄下查詢檔案,並拷貝到但前目錄下
[[email protected] ~]# find /opt -name "elastic*.yml" -exec cp {} ./ \;
找到檔案並用ls -lh顯示
[[email protected] ~]# find /opt -name "*.conf" -exec ls -lh {} \; -rw-r--r--. 1 hadoop hadoop 1.1K 3月 30 2018 /opt/modules/hadoop-3.1.0/share/hadoop/yarn/yarn-service-examples/httpd/httpd-proxy.conf -rw-r--r--. 1 hadoop hadoop 1009 3月 30 2018 /opt/modules/hadoop-3.1.0/share/hadoop/yarn/yarn-service-examples/httpd-no-dns/httpd-proxy-no-dns.conf