【Linux】find命令及用法

【Linux】find命令及用法

find命令在目录结构中搜索文件,并执行指定的操作。根据给定的路径和表达式查找的文件或目录。

命令选项:
  -name   按照文件名查找文件
  -perm   按照文件权限来查找文件
  -prune  不在当前指定的目录中查找,使用-depth选项,那么将被忽略
  -depth  先处理目录的内容再处理目录本身
  -user   按照文件属主来查找文件
  -group  按照文件所属的组来查找文件
  -mtime -n +n  按照文件的更改时间来查找文件
  -n表示文件更改时间距现在n天以内,+n表示文件更改时间距现在n天以前
  
  -nogroup  查找无有效所属组的文件
  -nouser   查找无有效属主的文件
  -newer file ! file1 查找更改时间比文件file新比文件file1旧的文件

# find
# find .

列出当前目录及子目录下所有文件和文件夹

# find /home -name "*.txt"
# find /home -iname "*.txt"

在/home目录下查找以.txt结尾的文件名
在/home目录下查找以.txt结尾的文件名,忽略大小写

# find ./ -name "*.txt" -o -name "*.pdf"

当前目录及子目录下查找所有以.txt和.pdf结尾的文件

# find ./ -type f

查找当前目录下所有的普通文件
类型参数列表:

f 普通文件
l 符号连接
d 目录
c 字符设备
b 块设备
s 套接字
p Fifo(先进先出队列)

# find ./ -mindepth 3 -type f

搜索出深度距离当前目录至少3个子目录的所有文件
UNIX/Linux文件系统的三种时间戳:

-atime/天,-amin/分钟:用户最近一次访问时间
-mtime/天,-mmin/分钟:文件内容最后一次修改时间
-ctime/天,-cmin/分钟:文件属性最后一次修改时间

-n表示文件更改时间距现在n天以内
+n表示文件更改时间距现在n天以前

# find ./ -type f -atime -7

搜索最近七天内被访问过的所有文件

# find ./ -type f -atime +7

搜索超过七天内被访问过的所有文件

# find ./ -type f -atime 7

搜索恰好在七天前被访问过的所有文件
文件大小单位

b —— 块(512字节)
c —— 字节
w —— 字(2字节)
k —— 千字节
M —— 兆字节
G —— 吉字节

# find / -type f -size +10k
# find / -type f -size -10k

搜索大于10KB的文件
搜索小于10KB的文件

# find . -type f -name "*.txt" -delete

删除当前目录下所有.txt文件

# find ./ -type f -perm 777

当前目录下搜索出权限为777的文件

# find ./ -type f -user you

找出当前目录用户拥有的所有文件

# find ./ -type f -group you

找出当前目录用户组拥有的所有文件
pathname: 目录路径,用.来表示当前目录,用/来表示系统根目录
-print:  将匹配的文件输出到标准输出。 
-exec:   对匹配的文件执行该参数所给出的shell命令
-ok:     在执行每一个命令之前都会给出提示来确定是否执行
  • exec
想要的操作写在一个文件里,可以用exec来配合find查找
相应命令的形式为 command {  } \; 注意{   }和\;之间的空格
使用exec选项,必须要同时使用print选项
  • xargs
find命令把匹配到的文件传递给xargs命令,
xargs命令每次只获取一部分文件而不是全部
  • 实例

# find ./ -name "you" -exec ls -l {} \;

查找匹配的文件之后,使用ls命令显示详细信息

# find ./ -type f -mtime +7 -exec rm {} \;

在指定目录中查找更改时间在7日以前的文件并删除

# find ./ -name "you" -mtime +7 -ok rm {} \;

在目录中查找更改时间在7日以前的文件并删除,在删除之前先给出提示
y键删除文件,n键不删除

# find /etc -name "passwd*" -exec grep "root" {} \;

在指定的目录中查找文件,然后通过搜索出现root的行
任何形式的命令都可以在-exec选项中使用

# find ./ -name "you" -exec mv {} . \;

查找文件移动到指定的目录

# find ./ -name "you" | xargs file

查找当前目录下所有的文件,使用xargs命令来测试它们分别属于哪类文件

# find . -type f -atime +0 -print0 | xargs -0 -l1 -t rm -f

执行xargs提示xargs: argument line too long解决方法
-l1 一次处理一个;-t 处理之前打印出命令

# find / -path "test/test1" -prune -o -print

查找过程中忽略某个目录
使用-prune选项来指出需要忽略的目录。如果同时使用了-depth选项
那么-prune选项就会被忽略

# find test \( -path test/test3 -o -path test/test4 \) -prune -o -print

避开多个文件,圆括号表示表达式的结合
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值