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命令使用的主要内容,如果未能解决你的问题,请参考以下文章

Linux学习-find命令使用

linux find命令用法 linux学习心得体会

linux学习find命令Linux文件后缀名Linux和windows文件互传

Linux——学习篇之find命令

linux学习笔记16--命令find

Linux学习第八篇之文件搜索命令find