Linux学习-find命令使用
Posted 丢爸
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux学习-find命令使用相关的知识,希望对你有一定的参考价值。
find
在指定目录结构下查找文件命令,find命令所使用的查找参数与文件的属性相对应,
#文件属性对应的查找参数
d rwxr-xr-x 2 root root 6 Jan 20 08:50 abcd
-type -perm -size -user -group -atime|-mtime|-ctime -name|-iname
使用方法
find [-H] [-L] [-P] [-D debugopts] [-Olevel] [path…] [expression]
-name:通过名称进行查找,区分大小写
[root@base tmp]# find /etc -name 'ifcfg*'
/etc/sysconfig/network-scripts/ifcfg-lo
/etc/sysconfig/network-scripts/ifcfg-ens33
-iname:通过名称查找,不区分大小写
[root@base tmp]# find /etc -iname 'Ifcfg*'
/etc/sysconfig/network-scripts/ifcfg-lo
/etc/sysconfig/network-scripts/ifcfg-ens33
-size:通过文件大小查找
#+5M表示大于5M的文件
[root@base tmp]# find /etc -size +5M -ls
73 7600 -r--r--r-- 1 root root 7780559 Jul 10 2020 /etc/udev/hwdb.bin
[root@base tmp]# ll -h /etc/udev/hwdb.bin
-r--r--r--. 1 root root 7.5M Jul 10 2020 /etc/udev/hwdb.bin
#先通过dd创建一个5M的文件,进行查找测试, -size 5M表示正好查找大小5M文件
[root@base tmp]# dd if=/dev/zero of=test.txt bs=1M count=5
5+0 records in
5+0 records out
5242880 bytes (5.2 MB) copied, 0.00434053 s, 1.2 GB/s
[root@base tmp]# find /tmp -size 5M
/tmp/test.txt
-maxdepth:通过目录深度查找
[root@base tmp]# find /etc -maxdepth 2 -name 'ifcfg*'
[root@base tmp]# find /etc -maxdepth 3 -name 'ifcfg*'
/etc/sysconfig/network-scripts/ifcfg-lo
/etc/sysconfig/network-scripts/ifcfg-ens33
-user|-group:通过文件属主或属组查找
#按文件属主查找
[root@base tmp]# ll
total 0
-rw-r--r-- 1 root root 0 Jan 20 19:15 root.txt
-rw-rw-r-- 1 user01 user01 0 Jan 20 19:15 user01.txt
[root@base tmp]# find . -user user01
./user01.txt
#按文件属组查找
[root@base tmp]# find /tmp -user user01
/tmp/user01.txt
[root@base tmp]# find /tmp -group user01
/tmp/user01.txt
-perm:根据权限来查找
#-perm 根据权限查看, -ls表示查找后要执行的动作
[root@base tmp]# find /tmp -perm 644 -ls
68212273 12 -rw-r--r-- 1 root root 12288 Jan 15 08:30 /tmp/.file2.swp
68212268 0 -rw-r--r-- 1 root root 0 Jan 20 19:15 /tmp/root.txt
[root@base tmp]# ll -a
total 12
drwxrwxrwt. 8 root root 161 Jan 20 19:17 .
dr-xr-xr-x. 19 root root 246 Jan 18 07:53 ..
-rw-r--r-- 1 root root 12288 Jan 15 08:30 .file2.swp
drwxrwxrwt. 2 root root 6 Jul 10 2020 .font-unix
drwxrwxrwt. 2 root root 6 Jul 10 2020 .ICE-unix
drwxr-xr-x 2 root root 6 Jan 20 19:17 rootdirc
-rw-r--r-- 1 root root 0 Jan 20 19:15 root.txt
drwxrwxrwt. 2 root root 6 Jul 10 2020 .Test-unix
-rw-rw-r-- 1 user01 user01 0 Jan 20 19:15 user01.txt
drwxrwxrwt. 2 root root 6 Jul 10 2020 .X11-unix
drwxrwxrwt. 2 root root 6 Jul 10 2020 .XIM-unix
-delete:查找后删除
[root@base tmp]# find /tmp -perm 644 -delete
[root@base tmp]# ll -a
total 0
drwxrwxrwt. 8 root root 127 Jan 20 19:26 .
dr-xr-xr-x. 19 root root 246 Jan 18 07:53 ..
drwxrwxrwt. 2 root root 6 Jul 10 2020 .font-unix
drwxrwxrwt. 2 root root 6 Jul 10 2020 .ICE-unix
drwxr-xr-x 2 root root 6 Jan 20 19:17 rootdirc
drwxrwxrwt. 2 root root 6 Jul 10 2020 .Test-unix
-rw-rw-r-- 1 user01 user01 0 Jan 20 19:15 user01.txt
drwxrwxrwt. 2 root root 6 Jul 10 2020 .X11-unix
drwxrwxrwt. 2 root root 6 Jul 10 2020 .XIM-unix
对查找结果执行其他操作
#注:find查找结果后,执行其它命令,需要以;结尾,【\\;】中的\\表示转义
[root@base tmp]# find /etc -name ifcfg* -ok cp -rvf /tmp \\;
< cp ... /etc/sysconfig/network-scripts/ifcfg-lo > ? y
‘/etc/sysconfig/network-scripts/ifcfg-lo’ -> ‘/tmp/ifcfg-lo’
< cp ... /etc/sysconfig/network-scripts/ifcfg-ens33 > ? y
‘/etc/sysconfig/network-scripts/ifcfg-ens33’ -> ‘/tmp/ifcfg-ens33’
[root@base tmp]# ls /tmp
ifcfg-ens33 ifcfg-lo rootdirc user01.txt
#使用xargs执行find查找后的命令
[root@base //]# find /etc -name ifcfg* | xargs -i cp /tmp/
#查找文件后,将查找的结果删除
[root@base tmp]# find /tmp -name '*.gz' | xargs rm -rf
问题1:
#执行tar命令打包目录时报以下错误
[root@base tmp]# tar -zcf etc.tar.gz /etc/
tar: Removing leading `/' from member names
解决方法
# 因为我们使用的是绝对路径,而不是相对路径。而tar 命令默认是采用相对路径来进行压缩打包的
#在执行命令时加入【-P | --absolute-names】参数,表示不要从文件名前去除前导【/】
[root@base tmp]# tar -zcPf etc1.tar.gz /etc/
以上是关于Linux学习-find命令使用的主要内容,如果未能解决你的问题,请参考以下文章