find命令说明事例

例子

  1. 列出当前目录及子目录下所有的文件和文件夹
find . -print         # -print 指明打印出匹配文件的文件名(路径)。当使用-print时,'\n'作为用于分隔文件的定界符
find . -print0       # -print0 指明使用'\0'作为定界符来打印每个匹配的文件名。当文件名中包含换行符时,这个方法就有用武之地
  1. 根据文件名或颪表达式匹配搜索
     find /home/slynux -name "*.txt" -print   # -name  参数 指定了文件名所必须匹配的字符串。我们可以将通配符作为参数使用。
     find /home/slnnux -iname "*.txt" -print   # -iname 参数跟-name一样的只是匹配名字的时候,忽略大小写
  1. 匹配多个条件中的一个
    find . \( -name "*.txt" -o -name "*.pdf" \) -print   #-o 参数进行多个参数的or条件操作
  1. 选项-path -name -regex参数的不同

  find . -path "*txt*" -print                 # -path 将 文件路径作为一个整体进行匹配。
  find . -name "*txt*" -print               # -name  给定的文件名进行匹配
  find . -regex ".*\(\.py\|\.sh\)$" -print # 跟-path类似,但是是基于正则表达式来匹配文件路径    此命令 匹配.py或.sh文件

  1. 否定参数
    find . ! -name "*.txt" -print    # 通过!否定参数的含义。
  1. 基于目录深度的搜索
    find . -maxdepth 1 -type f -print     # 只列出当前目录下的所有普通文件。即使有子目录,也不会被打印或遍历。  -type 用来指定搜索文件类型。 -type f  只列出普通文件类型

-maxdepth 或-mindepth 应用 作用find的第3个参数出现。如果作为第4个或之后的参数,就可能会影响到find的效率,因为它不得不进行一些不必要的检查。例如,如果-maxdepth 作为 第4个参数,-type作用为第三个参数,find首先会的出符合-type的所有文件,然后 在所有的匹配的文件中再找出符合指定尝试的那些。但是如果反过来。目录尝试作为第三个参数,-type作为第四个参数,那么find就能 够在找到所有符合指定尝试的文件后,再检查这些文件的类型,这才是最有效的搜索顺序。

  1. 根据文件类型搜索
find . -type d -print    # -type用来指定文件类型  d 为目录 f 为普通文件 l为符号链接  c 字符设备  b 块设备 s 套接字 p fifo
find . -type f -print
find . -type l -print 
  1. 根据文件时间进行搜索
find . -type f -atime -7 -print   # 打印出在最近七天内被访问过的所有的文件
find . -type f -atime 7 -print #打印出在七天前被访问过的所有文件
find . -type f -atime +7 -print # 打印出访问时间超过七天的所有文件

#类似的,根据修改时间,用-mtime进行搜索 ;根据变化时间,用-ctime进行搜索 
# -atime -mtime -ctime都是基于时间的参数,其计量单位是“天”

find . -type f -amin +7 -print   #打印出访问时间在超 过7分钟的所有文件
find . -type f -mmin +7 -print   #打印出修改时间超 过7分钟的所有的文件
find . -type f -newer file.txt -print   # 找出比file.txt修改时间更长的所有文件
  1. 基于文件大小 的搜索
find . -type f -size +2k #大于2kb的文件
find . -type f -size -2k # 小于2kb的文件
find . -type f -size 2k #大小等于2kb的文件
  1. 删除匹配的文件
   find . -type f -name "*.swf" -delete # -delete 可以用来删除find查找到的匹配文件

11.基于文件权限和所有权的匹配

find . -type f -perm 644 -print #  -perm 参数   打印出权限为644的文件
find . -type f -name "*.php" ! -perm 644 -print  #查找不是权限 为644的文件
find . -type f -user slynu -print # -user 参数,指定用户名或者uid
  1. -exec 结合find执行命令或动作
find . -type f -user root -exec chown slynux {} \; # 找出root拥有的所有文件,然后-exec更改所有权

# {}是一个特殊的字符串,与-exec 选项结合使用。对于每天匹配的文件,{} 会被 替换成相应的文件名。
find . -type f -name "*.txt" -exec printf "text file :%s\n" {} \;
  1. 跳过特定的目录
find . \( -name ".git" -prune \) -o \( -type f -print \)# 打印出不包括在.git目录中的所有文件名称

#这里的 \( -name ".git" -prune \) 的作用是用于进行排除,它指明了.git目录应用被排除掉。
    原文作者:佛心看世界
    原文地址: https://www.jianshu.com/p/0da7d4dba6ee
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞