Linux find命令

在find中使用通配符时,要用双引号,如"name *"

选项作用
-name filename查找名为filename的文件
-iname filename同上,忽略文件名大小写
-perm按执行权限来查找
-user username按文件属主来查找
-group groupname按组来查找
-mtime -n +n按文件更改时间来查找文件,-n指n天以内,+n指n天以前
-atime -n +n按文件访问时间来查
-ctime -n +n按文件创建时间来查找文件,-n指n天以内,+n指n天以前
-nogroup查无有效属组的文件,即文件的属组在/etc/groups中不存在
-nouser查无有效属主的文件,即文件的属主在/etc/passwd中不存
-type b/d/c/p/l/f查是块设备、目录、字符设备、管道、符号链接、普通文件
-depth先查找子目录,再查找父目录
-maxdepth n规定查找的最大目录深度,当前目录的深度就是1
-path后面跟路径,指定文件或文件夹的路径
比如"./dir/*"表示当前目录下的dir目录下的所有文件
但是"./dir"仅仅表示dir这一个目录,也就是说这个选项只会影响这一个目录,而不影响目录下的文件

find条件判断

  1. -o 相当于bash的||,即前面为假则继续
  2. -a 相当于bash的&&,前面为真,则继续
  3. ! 对选项的判断结果取反(选项的结果不是判断而是操作,那这个!就是无效的,比如 -print 和 ! -print效果一样)

-o 和 -a必须加在两个选项之间,意思是前一个选项为假/真,就执行下一个选项,! 直接加到选项前面即可,但是也要有空格
多个选项之间默认的逻辑是 -a,也就是【与】

例子

  1. find . -name "grub*" -print :遍历当前目录下所有文件(夹),如果文件(夹)的名字是以grub开头的,就打印文件(夹)的名字
    find后面的一个点【英文的句号】表示当前目录,可以省略。
  2. find . -name "grub*" -o -print:遍历当前目录下所有文件(夹),如果文件(夹)的名字不是以grub开头的,就打印文件(夹)的名字
  3. find -path "./dir/*" -o -print:列出除了dir目录下的所有文件
  4. find ! -path "./dir/*" -print:效果同上
  5. find ! -path "./dir1/*" ! -path "./dir2/*" -print:排除多条路径

条件判断太复杂了,我现在只能说把【!】用在排除路径上挺好的,还是不要用在其他地方上,而且也不要用【-o】,【-a】

正则表达式

-regex 'regex':用正则表达式来匹配
-name 不能搜索所有深度的子目录,有一些目录会被略过,略过的规则不清楚,但可以肯定的是它不是安装目录深度来判断是否需要略过的
需要查找所有深度的文件需要使用正则表达式
正则表达式匹配的是文件的相对路径,而不是文件名
正则表达式可以用单引号,也可以使用双引号,如果使用双引号那就可以在里面直接使用 bash 变量了
-iregex 是忽略大小写的正则表达式

find -type f -regex '.*\.mk$':查找当前目录及所有深度的子目录中的 mk 文件

xargs -d:设置分隔符,默认空格和换行都是分隔符
find PATH option -print0 | xargs -0 command
find 的输出一行表示一个查找到的文件,而 xargs 以空格作为分隔符,所以如果 find 的某一行输出中包含空格(也就是说某个文件名中包含空格),那对于 xargs 来说这一行表示两个文件
为了解决这个问题,使用 -print0,使得 find ,每输出一个文件之后都跟一个 NULL 字符,再使用 -0 告诉 xargs 使用 NULL 字符作为分隔符,而不是空格

xargs 比较常用的参数还有 -I,这个参数是指定一个字符作为特殊字符,后面命令中用到的该特殊字符会被替换成 xargs 的输出,这个特殊字符常常使用{}
这里我查找所有【此间少年】目录下的文件(此间少年是高晓松的作品集,由众多歌手演唱,所以会看到【老狼】这个目录下有【此间少年】的目录,【叶蓓】的目录下也有),把它们复制到根目录的【此间少年】目录中
find -type f -regex '.*此间的少年.*' -print0 | xargs -0 -I mv {} 此间的少年/
删除所有空目录,rmdir 不会删除非空目录,-depth 会先列出子目录,这样子目录如果被删除,父目录也变空的了,那也会删除
find -type d -depth -print0 | xargs -0 rmdir

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值