find参数
格式:find pathname -options [-print]
命令字 路径名称 选项 输出
pathname: find命令所查找的目录路径,不输入代表当前目录例如用 . 来表示当前目录,用 / 来表示系统根目录。
find命令选项:
-name 按照文件名查找文件。 “名称”
-perm 按照文件权限来查找文件。666 777 等
-user 按照文件属主来查找文件
-group 按照文件所属的组来查找文件
-mtime -n / +n 按照文件的更改时间来查找文件,
- n 表示文件更改时间距现在n天以内
+ n 表示文件更改时间距现在n天以前
-type 查找某一类型的文件
b - 块设备文件
d - 目录
c - 字符设备文件
p - 管道文件
l- 符号链接文件
f - 普通文件
-size n 查找符合指定的文件大小的文件
-exec 对匹配的文件执行该参数所给出的其他linux命令, 相应命令的形式为' 命令 {} \;,
注意{ }和 \;之间的空格,{}代表查到的内容
find命令的8大实例
例1:查看当前目录下所有的TXT格式的文件
[root@break test]# find . -name "*.txt"
./a.txt
./b.txt
./c.txt
./1.txt
./3.txt
./4.txt
./12.txt
./a.txt
2、按照更改时间或访问时间等查找文件
如果希望按照更改时间来查找文件,可以使用mtime,atime或ctime选项
mtime: 文件最后一次修改的时间
atime: 最后一次访问时间
ctime: 文件的最后一次变化时间,也就是修改时间
例1:希望在root目录下查找更改时间在1天以内,被黑客修改的文件
[root@break test]# find / -mtime 1
find: ‘/proc/2431/task/2431/fd/5’: 没有那个文件或目录
find: ‘/proc/2431/task/2431/fdinfo/5’: 没有那个文件或目录
find: ‘/proc/2431/fd/6’: 没有那个文件或目录
find: ‘/proc/2431/fdinfo/6’: 没有那个文件或目录
/etc/adjtime
/root/test/a.txt
/root/1.txt
/root/.a.txt.swo
/root/.a.txt.swp
/var/lib/unbound/root.key
/home/du/.local/share
/home/du/.local/share/app-info
3、对查找内容执行相应命令
-exec 这个选项参数后面可以跟自定义的SHELL命令,格式如下:命令 {} \;,
例2:查找并显示当前目录下的以back结尾的文件
[root@break test]# find . -name "*.back" -exec ls -l {} \;
-rw-r--r--. 1 root root 0 3月 28 14:01 ./1.back
-rw-r--r--. 1 root root 0 3月 28 14:01 ./2.back
-rw-r--r--. 1 root root 0 3月 28 14:01 ./3.back
例3:移动到/opt/下将找到的back文件结尾的内容
[root@break test]# find . -name "*.back" -exec mv {} /opt/ \;
[root@break test]# ls -al *.back
ls: 无法访问*.back: 没有那个文件或目录
[root@break test]# ls /opt
1.back 1.txt 2.back 2.txt 3.back 3.txt 4.txt a.txt back b.txt cpu.txt c.txt rh success.txt xuegod.txt
例4:把查找到的文件复制到一个指定的目录
[root@break test]# find . -name "*.back" -exec cp {} /opt/back \;
[root@break test]# cd /opt/back/
[root@break back]# ls
100.back 17.back 24.back 31.back 39.back 46.back 53.back 60.back 68.back 75.back 82.back 8.back 97.back
10.back 18.back 25.back 32.back 3.back 47.back 54.back 61.back 69.back 76.back 83.back 90.back 98.back
11.back 19.back 26.back 33.back 40.back 48.back 55.back 62.back 6.back 77.back 84.back 91.back 99.back
12.back 1.back 27.back 34.back 41.back 49.back 56.back 63.back 70.back 78.back 85.back 92.back 9.back
13.back 20.back 28.back 35.back 42.back 4.back 57.back 64.back 71.back 79.back 86.back 93.back back.tar
14.back 21.back 29.back 36.back 43.back 50.back 58.back 65.back 72.back 7.back 87.back 94.back
15.back 22.back 2.back 37.back 44.back 51.back 59.back 66.back 73.back 80.back 88.back 95.back
16.back 23.back 30.back 38.back 45.back 52.back 5.back 67.back 74.back 81.back 89.back 96.back
例5:xargs和find命令结合 复制文件 -i 表示 find 传递给xargs的结果 由{}来代替 (了解)
也就是说,-exec ==| xargs -i 并且去掉\;
[root@break test]# find . -name "*.back" | xargs -i cp {} /opt
[root@break test]# cd /opt/
[root@break opt]# ls
100.back 17.back 24.back 31.back 39.back 46.back 53.back 60.back 68.back 75.back 82.back 8.back ...
例6:查找多个类型文件
比较符的使用:
-a and 并且
-o or 或者
+ 超过
- 低于
#同时找到2种不同的文件
[root@break test]# touch a.sh b.hs
[root@break test]# find . -name "*.sh" -o -name "*.hs"
./a.sh
./b.hs
#查找大于20K的文件,小于50K的文件
[root@break test]# find /etc -size +20k -a -size -50k
/etc/selinux/targeted/active/modules/100/apache/hll
/etc/selinux/targeted/active/modules/100/init/hll
/etc/selinux/targeted/active/modules/100/staff/cil
例7: 按权限查找:-perm
[root@break test]# find /bin -perm -644
/bin
查找文件的777文件
[root@break test]# find / -type f -perm 777
find: ‘/proc/5013/task/5013/fdinfo/5’: 没有那个文件或目录
find: ‘/proc/5013/fdinfo/6’: 没有那个文件或目录
例8:查找的目录深度:
-maxdepth 1 #只查找目录第一层的文件和目录
如:查找/bin目录下权限至少为111的普通文件。
[root@break test]# find /bin/ -maxdepth 1 -type f -perm 111
/bin/sudoreplay
例9:查找系统中所有属于用户du的文件,并把这个文件,放到/root/findresults目录下
[root@break ~]# mkdir findresults
[root@break ~]# find / -user du -exec cp -a {} /root/findresults/ \;
find: ‘/proc/5872/task/5872/fd/5’: 没有那个文件或目录
find: ‘/proc/5872/task/5872/fdinfo/5’: 没有那个文件或目录
find: ‘/proc/5872/fd/6’: 没有那个文件或目录
find: ‘/proc/5872/fdinfo/6’: 没有那个文件或目录
cp: 无法以目录"/home/du" 来覆盖非目录"/root/findresults/du"
出现这种错误,是因为你要将不同目录,但名字相同的文件,放到同一文件下。