三劍客詳解之find

Dusk_Yun發表於2024-08-17

一、檔案型別:

  • f:表示普通檔案
  • b:表示塊裝置
  • c:表示位元組檔案
  • d:標識目錄
  • l:標識軟連結

二、實踐案例:

1、準備工作:

[root@web01 web_test]# ll
total 0
-rw-r--r--. 1 root root 0 Aug 17 18:32 1.txt
-rw-r--r--. 1 root root 0 Aug 17 18:32 2.txt
-rw-r--r--. 1 root root 0 Aug 17 18:32 3.txt
-rw-r--r--. 1 root root 0 Aug 17 18:32 4.txt
-rw-r--r--. 1 root root 0 Aug 17 18:32 5.txt
-rw-r--r--. 1 root root 0 Aug 17 18:32 6.txt
-rw-r--r--. 1 root root 0 Aug 17 18:32 7.txt
drwxr-xr-x. 2 root root 6 Aug 17 18:41 web1
drwxr-xr-x. 2 root root 6 Aug 17 18:41 web2
drwxr-xr-x. 2 root root 6 Aug 17 18:41 web3

2、實踐

1、查詢所有普通檔案
[root@web01 web_test]# find ./ -type f
./1.txt
./2.txt
./3.txt
./4.txt
./5.txt
./6.txt
./7.txt

2、查詢所有目錄檔案
[root@web01 ~]# find web_test/ -type d		# 使用絕對路徑
web_test/
web_test/web1
web_test/web2
web_test/web3

3、查詢位元組檔案
[root@web01 ~]# find /dev/ -type c|grep null
/dev/null
[root@web01 ~]# find /dev/ -type c|grep zero
/dev/zero

3、根據需求建立指定1G檔案大小檔案

[root@web01 ~]# dd if=/dev/zero of=test.txt bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 3.72317 s, 288 MB/s
[root@web01 ~]# ll -d test.txt 
-rw-r--r--. 1 root root 1073741824 Aug 17 18:53 test.txt

三、find按照修改時間查詢所需檔案/目錄

  • atime:訪問時間
  • mtime:修改時間[常用]
  • ctime:改變時間

1、實踐:

mtime 1	# 修改時間為1天前
mtime 0	# 表示當天1天內
mtime +1	# 表示1天前的

案例1:查詢修改時間為10天前的
[root@web01 web_test]# find ./ -mtime +10
./
./1.log
./2.log
./3.log

四、小結:

find ./ -name	# 按照名稱查詢
find ./ -iname	# 不區分大小寫
find ./ -name "*.txt"	# 表示所有的.txt結尾
find ./ -name "oldboy*"	# 表示所有oldboy開頭的檔案
find ./ -type f	# 按照型別查詢
	型別:f d b l
find ./ -inum inode號碼
find ./ -size +10M	# 按照大小查詢
	# 大小10M 等於10M | +10M 大於10M | -10M 小於10M
find ./ -mtime +7	# 按照檔案的修改時間查詢
	# 時間 +7 大於7天前 | -7 7天內 | 7 第7天的
find ./ -maxdepth 1 -name 	# 按照深度等級查詢

並且關係:-a and
find ./ -type f -name "*.txt"
find ./ -size +10M -size -1G
或者關係:-o or
find ./ -type f -o -size +10M

五、find查詢到的內容交給其他命令如何處理

1、使用xargs處理find的結果

1、find查詢到的內容進行刪除,交給rm處理
xargs後面的別名無效
[root@web01 web_test]# find ./ -name "3.txt" | xargs rm
[root@web01 web_test]# ll
total 0
-rw-r--r-- 1 root root 0 Nov 24 16:43 1.txt
-rw-r--r-- 1 root root 0 Nov 24 16:43 2.txt

查詢到內容交給ls檢視
[root@web01 web_test]# find ./ -name "2.txt" | xargs ls -l
-rw-r--r-- 1 root root 0 Nov 24 16:43 ./2.txt


2、find查詢到的內容進行復制,交給cp命令
[root@web01 web_test]# ll
total 0
-rw-r--r-- 1 root root 0 Nov 24 17:54 10.txt
-rw-r--r-- 1 root root 0 Nov 24 16:43 1.txt
-rw-r--r-- 1 root root 0 Nov 24 16:43 2.txt
-rw-r--r-- 1 root root 0 Nov 24 17:54 45.txt
[root@web01 web_test]# find ./ -name "*.txt" | xargs -i cp {} /opt/		# i屬於佔位符;如果需要遞迴查詢需要讓cp也遞迴即:cp -r--->遞迴複製
[root@web01 web_test]# ll /opt/
total 0
-rw-r--r--  1 root root   0 Nov 24 18:00 10.txt
-rw-r--r--  1 root root   0 Nov 24 18:00 1.txt
-rw-r--r--  1 root root   0 Nov 24 18:00 2.txt
-rw-r--r--  1 root root   0 Nov 24 18:00 45.txt


3、find查詢到的內容進行復制,交給mv命令
[root@web01 web_test]# find /opt/ -name "*.txt"|xargs -i mv {} /tmp/
[root@web01 web_test]# ll /opt/
total 0
drwxr-xr-x. 9 root root 173 Nov 24 18:02 gitlab
[root@web01 web_test]# ll /tmp/
total 0
-rw-r--r-- 1 root root 0 Nov 24 18:05 10.txt
-rw-r--r-- 1 root root 0 Nov 24 18:05 1.txt
-rw-r--r-- 1 root root 0 Nov 24 18:05 2.txt
-rw-r--r-- 1 root root 0 Nov 24 18:05 45.txt

2、使用exec處理find的結果

1、find查詢到的內容進行刪除,交給rm處理
[root@web01 web_test]# find ./ -name "1.txt" -exec rm {} \;	# \表示跳棍,用來修飾;表示本意,這樣也就修飾了“;”不是用於表示後面還有
[root@web01 web_test]# ll
total 0
-rw-r--r-- 1 root root 0 Nov 24 17:54 10.txt
-rw-r--r-- 1 root root 0 Nov 24 16:43 2.txt
-rw-r--r-- 1 root root 0 Nov 24 17:54 45.txt


2、find查詢到的內容進行復制,交給cp命令
[root@web01 web_test]# find ./ -name "*.txt" -exec cp {} /opt/ \;
[root@web01 web_test]# ll /opt/
total 0
-rw-r--r--  1 root root   0 Nov 24 18:16 10.txt
-rw-r--r--  1 root root   0 Nov 24 18:16 2.txt
-rw-r--r--  1 root root   0 Nov 24 18:16 45.txt


3、find查詢到的內容進行復制,交給mv命令
[root@web01 web_test]# find /opt/ -name "*.txt" -exec mv {} /tmp/ \;

3、find的結果交給其他命令使用

1、find的結果交給rm命令
[root@web01 web_test]# rm -rf `find ./ -name "2.txt"`
		或者
[root@web01 web_test]# rm -rf $(find ./ -name "2.txt")
[root@web01 web_test]# ll
total 0
-rw-r--r-- 1 root root 0 Nov 24 17:54 10.txt
-rw-r--r-- 1 root root 0 Nov 24 17:54 45.txt


2、find結果交給cp命令
[root@web01 web_test]# cp `find ./ -name "10.txt"· /opt/
[root@web01 web_test]# rm -rf `find /opt/ -type f -mtime +7`		# 7天前的


3、find結果交給ls或者mv
[root@web01 web_test]# mv `find ./ -name "*.txt"` /opt/
[root@web01 web_test]#cd /opt/
[root@web01 opt]# ll
total 0
-rw-r--r--  1 root root   0 Nov 24 17:54 10.txt
-rw-r--r--  1 root root   0 Nov 24 17:54 45.txt

相關文章