【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
避开多个文件,圆括号表示表达式的结合