本篇主要接着上一篇文章继续就“测试常见linux命令集合八”进行展开讲解,主要包括“find”命令的各种用法。希望感兴趣的小伙伴可以坚持看下去同时欢迎提出宝贵的意见让我们一起进步!
39:命令find
find [查找路径][options][查找条件] [处理动作]
find path -option [-print ] [ -exec -ok command ] {} \;
说明:在指定目录下查找文件
参数:
-type 根据文件类型查找(b/d/c/p/l/f 依次表示:块设备、目录、字符设备、管道、符号链接、普通文件)
-name 根据文件名称查找
-user 根据文件属主查找
-perm 根据文件权限查找
-print 将find找到的文件输出到标准输出
-size n 根据文件的大小取查找(-n指小于大小为n的文件;+n指大于大小为n的文件)
-mtime n 根据文件更改时间查找(-n指n天以内修改的文件;+n指n天以前修改的文件)
-atime n 根据文件读取时间查找(-n指n天以内修改的文件;+n指n天以前修改的文件)
-ctime n 根据文件修改时间查找(-n指n天以内修改的文件;+n指n天以前修改的文件)
注意:
(1)查找路径:默认为当前目录
(2)查找条件:默认为查找指定路径下的所有文件
(3)处理动作:默认为显示,可以接-ls,相当于ll显示文件
文件名通配符:
“*”: 通配任意的字符,可以是任何东西。
”?”: 可表示任意单个字符
”[]”:表示通配括号里面的任意一个字符,注意[]里面的内容会被解析成单个字符
01:在当前目录及子目录下查找所有扩展名为“ini”的文件:
find ./ -name *.ini"
[anxin@VM_0_5_centos isTester]$ find ./ -name "*.ini"
./isTester.ini
./usr/isTester/isTester.ini
./sort.ini
02:在isTester目录及子目录下查找所有名字为isTester.ini的文件:
find ./isTester/ -name isTester.ini
[anxin@VM_0_5_centos ~]$ find ./isTester/ -name isTester.ini
./isTester/isTester.ini
./isTester/usr/isTester/isTester.ini
./isTester/etc/isTester.ini
03:在当前目录及子目录下查找所有大于50M的文件:
find ./ -size +50M
[anxin@VM_0_5_centos ~]$ find ./ -size +50M
./isTester/tomcat6755.hprof
./tomcat6755.hprof
./heap.bin
04:在isTester/usr目录下查找空文件和文件夹:
find ./isTester/usr/ -empty
[anxin@VM_0_5_centos ~]$ find ./isTester/usr/ -empty
./isTester/usr/isTester/isTester
./isTester/usr/isTester/isTester.tar
./isTester/usr/isTester/idoxu/istester/2020
05:在isTester/usr目录下查找更改时间在2日以内的文件:
find ./isTester/usr/ -mtime -2
[anxin@VM_0_5_centos ~]$ find ./isTester/usr/ -mtime -2
./isTester/usr/isTester/isTester1
./isTester/usr/isTester/isTester2
./isTester/usr/isTester/isTester3
06:在isTester/usr目录下查找更改时间在3日以前的文件:
find ./isTester/usr/ -mtime +3
[anxin@VM_0_5_centos ~]$ find ./isTester/usr/ -mtime +3
./isTester/usr/
./isTester/usr/isTester
./isTester/usr/isTester/isTester
07:在isTester/usr目录下查找所有的目录:
find ./isTester/usr/ -type d
[anxin@VM_0_5_centos ~]$ find ./isTester/usr/ -type d
./isTester/usr/
./isTester/usr/isTester
./isTester/usr/isTester/isTester1
./isTester/usr/isTester/isTester2
./isTester/usr/isTester/isTester3
08:在isTester/usr目录下查找所有的文件:
find ./isTester/usr/ -type f
[anxin@VM_0_5_centos ~]$ find ./isTester/usr/ -type f
./isTester/usr/isTester/isTester.tar
./isTester/usr/isTester/isTester.ini
./isTester/usr/isTester/idoxu.tar
09:在isTester/usr目录下查找权限为777的文件和文件夹:
find ./isTester/usr/ -perm 777
[anxin@VM_0_5_centos ~]$ find ./isTester/usr/ -perm 777
./isTester/usr/
./isTester/usr/ido.tar.bz2
10: 在isTester/usr目录下查找以大写字母开头的文件和文件夹:
find ./isTester/usr/ -name "[A-Z]*"
[anxin@VM_0_5_centos ~]$ find ./isTester/usr/ -name "[A-Z]*"
./isTester/usr/Test
./isTester/usr/TXT.tar
./isTester/usr/TXT.tar.gz
11:在当前目录中搜索文件内容带“isTester”的字符串:
find ./ -type f |xargs grep "isTester"
[anxin@VM_0_5_centos ~]$ find ./ -type f |xargs grep "isTester"
匹配到二进制文件 ./isTester/Test.tar
匹配到二进制文件 ./isTester/isTester.tar
./isTester/isTester.ini:isTester1
./isTester/isTester.ini:isTester2
./isTester/isTester.ini:isTester3
12:在isTester/usr目录下查找文件长度为0的普通文件并列出它们的完整路径:
find ./isTester/usr/ -type f -size 0|xargs ls -l
或:
find ./isTester/usr/ -type f -size 0 -exec ls -l {} \;
[anxin@VM_0_5_centos ~]$ find ./isTester/usr/ -type f -size 0|xargs ls -l
-rw-rw-r-- 1 anxin anxin 0 3月 14 23:01 ./isTester/usr/1.png
-rwxrwxr-x 1 anxin anxin 0 3月 14 16:46 ./isTester/usr/1.txt
-rwxrwxr-x 1 anxin anxin 0 3月 14 16:47 ./isTester/usr/2.ini
[anxin@VM_0_5_centos ~]$ find ./isTester/usr/ -type f -size 0 -exec ls -l {} \;
-rw-rw-r-- 1 anxin anxin 0 3月 14 23:01 ./isTester/usr/1.png
-rwxrwxr-x 1 anxin anxin 0 3月 14 16:46 ./isTester/usr/1.txt
-rwxrwxr-x 1 anxin anxin 0 3月 14 16:47 ./isTester/usr/2.ini
13:在isTester/usr目录下查找.log文件且包含“error”的行:
find ./isTester/usr/ -type f -name "*.log" | xargs grep -r "error"
[anxin@VM_0_5_centos ~]$ find ./isTester/usr/ -type f -name "*.log" |xargs grep -r "error"
./isTester/isTester.log:error
./isTester/isTester.log:error-申请核保失败
14:在当前目录下删除1天以内的所有东西 :
find ./ -mtime -1 -print |xargs rm -rf
特别申明:如果当前目录内容发生任何变动,则代表本目录的
.
时间会发生变化。如果此时删除当前目录1天以内的所有东西则会提示“rm: 无法删除目录:"."”
,因此想要避免此问题可以使用./*
./*
:指除了本目录“.”
以外的所有文件
[anxin@VM_0_5_centos etc]$ ls -al --full-time
总用量 12
drwxrwxr-x 3 anxin anxin 4096 2020-03-28 00:12:49.000000000 +0800 .
drwxrwxr-x 5 anxin anxin 4096 2020-03-28 00:03:44.000000000 +0800 ..
drwxrwxr-x 2 anxin anxin 4096 2020-03-15 10:40:11.000000000 +0800 idoxu
-rw-rw-r-- 1 anxin anxin 0 2020-03-24 23:24:26.000000000 +0800 isTester.ini
[anxin@VM_0_5_centos isTester]$ find ./* -mtime -1 -print | xargs rm -rf
[anxin@VM_0_5_centos isTester]$ ll
总用量 4
drwxrwxr-x 2 anxin anxin 4096 3月 20 13:26 isTester
15:在当前目录删除8天以前的所有东西(不含
“.”
):find ./* -mtime +8 -print |xargs rm -rf
[anxin@VM_0_5_centos WWW]$ find ./* -mtime +8 -print |xargs rm -rf
[anxin@VM_0_5_centos WWW]$ ll
总用量 0
16:在当前目录删除8天以前的所有东西(不含
“.”
):find ./* -mtime +8 -print -delete
[anxin@VM_0_5_centos WWW]$ find ./* -mtime -1 -print -delete
./1/2/3
./1/2
./1/1.txt
./1
17:删除文件大小为零的文件:
find ./ -size 0 | xargs rm -rf
[anxin@VM_0_5_centos Test]$ ll
总用量 0
-rw-rw-r-- 1 anxin anxin 0 3月 25 00:46 isTester1
-rw-rw-r-- 1 anxin anxin 0 3月 25 00:46 isTester2
-rw-rw-r-- 1 anxin anxin 0 3月 25 00:46 isTester3
[anxin@VM_0_5_centos Test]$ find ./* -size 0 | xargs rm -rf
[anxin@VM_0_5_centos Test]$ ll
总用量 0
18:-a、-o、-not(也就是与、或、非)
(1)-a:连接两个不同的条件(即两个条件必须同时为真)
(2)-o:连接两个不同的条件(两个条件只要满足一个即可)
(3)-not:对条件进行取反
例如:查找0-3k大小的文件
[anxin@VM_0_5_centos ~]$ find ./isTester/usr -size +0 -a -size -3k
./isTester/usr/isTester/isTester.ini
./isTester/usr/isTester/y.tar
./isTester/usr/isTester/isTester2020.tar.gz
./isTester/usr/ido.tar.bz2
./isTester/usr/test.tar.gz
19:在isTester/usr目录下查找更改时间在7日以前的文件并在删除之前询问它们:
find ./isTester/usr/ -type f -mtime +7 -ok rm {} \;
[anxin@VM_0_5_centos ~]$ find ./isTester/usr/ -type f -mtime -1 -ok rm {} \;
< rm ... ./isTester/usr/1 > ? y
< rm ... ./isTester/usr/2 > ? y
< rm ... ./isTester/usr/3 > ? y
20:在isTester/usr目录下查找大于10k的.conf文件将其复制到 isTester/conf 目录下:
find ./isTester/usr/ -type f -name '*.conf' -size +10k -exec cp {} /root/conf/ \;
注意:
(1)-exec对搜索到的文件执行特定的操作。固定格式为:
-exec 'commond' {} \;
(2)find命令把匹配到的文件传递给
xargs命令
,而xargs命令每次只获取一部分文件而不是全部不像-exec选项那样。这样它可以先处理最先获取的一部分文件,然后是下一批并如此继续下去
(3)
find ./* -mtime -1 -exec rm -rf {} \;
:先删除当前目录下的东西然后将结果查询出来
网友评论