Linux find
命令学习
find
命令主要用于在文件系统中搜索符合条件的文件和目录。它可以根据各种条件进行搜索,比如文件的名称、类型、大小、权限、修改时间、访问时间等。find
命令能够递归地搜索目录,查找匹配指定条件的文件或目录,并执行相应的操作。
find
命令语法
virde@virde:~/workspace/gitee_code/study-notes$ find --help Usage: find [-H] [-L] [-P] [-Olevel] [-D debugopts] [path...] [expression] 默认路径为当前目录;默认表达式为 -print 表达式可能由下列成份组成:操作符、选项、测试表达式以及动作: 操作符 (优先级递减;未做任何指定时默认使用 -and): ( EXPR ) ! EXPR -not EXPR EXPR1 -a EXPR2 EXPR1 -and EXPR2 EXPR1 -o EXPR2 EXPR1 -or EXPR2 EXPR1 , EXPR2 位置选项 (总是真): -daystart -follow -regextype 普通选项 (总是真,在其它表达式前指定): -depth --help -maxdepth LEVELS -mindepth LEVELS -mount -noleaf --version -xdev -ignore_readdir_race -noignore_readdir_race 测试(N可以是 +N 或-N 或 N):-amin N -anewer FILE -atime N -cmin -cnewer 文件 -ctime N -empty -false -fstype 类型 -gid N -group 名称 -ilname 匹配模式 -iname 匹配模式 -inum N -ipath 匹配模式 -iregex 匹配模式 -links N -lname 匹配模式 -mmin N -mtime N -name 匹配模式 -newer 文件 -nouser -nogroup -path PATTERN -perm [-/]MODE -regex PATTERN -readable -writable -executable -wholename PATTERN -size N[bcwkMG] -true -type [bcdpflsD] -uid N -used N -user NAME -xtype [bcdpfls] -context 文本 actions: -delete -print0 -printf FORMAT -fprintf FILE FORMAT -print -fprint0 FILE -fprint FILE -ls -fls FILE -prune -quit -exec COMMAND ; -exec COMMAND {} + -ok COMMAND ; -execdir COMMAND ; -execdir COMMAND {} + -okdir COMMAND ; Valid arguments for -D: exec, opt, rates, search, stat, time, tree, all, help Use '-D help' for a description of the options, or see find(1) Please see also the documentation at http:///software/findutils/. You can report (and track progress on fixing) bugs in the "find" program via the GNU findutils bug-reporting page at https:///bugs/?group=findutils or, if you have no web access, by sending email to <bug-findutils@>.
用法示例
命令基础
find
命令在Linux中用于查找文件系统上的文件和目录。默认情况下,它会递归地列出当前目录及其所有子目录中的所有文件和目录。使用此命令,可以根据各种条件(如文件名、修改时间、文件类型等)来搜索文件和目录。
查找特定文件
-
使用
find /home/virde -name "*.md"
命令,可以在/home/virde
目录下查找所有扩展名为.md
的文件。这里,-name
选项指定了要匹配的文件名模式。 -
find /home/virde -iname "*.md" -o -iname "*.txt"
命令在相同的目录中查找所有.md
和.txt
文件。这里的-iname
选项与-name
相似,但它不区分大小写,而-o
代表逻辑“或”,使得命令可以匹配多个条件。
排除特定文件
- 使用
! -iname "*.md"
可以排除所有.md
文件。这里的!
表示逻辑“非”,用于反转匹配条件。
控制搜索深度
find -maxdepth 1
只搜索当前目录,不进入任何子目录。-maxdepth
选项限制了find
命令搜索的深度。find -mindepth 1
从当前目录的每个直接子目录开始搜索,而不检查当前目录中的文件。
指定文件类型
find -type d
只列出目录。-type
选项用于指定文件类型,如f
表示普通文件,l
表示符号链接,d
表示目录。
使用时间参数
- 时间参数
-atime
、-mtime
和-ctime
分别基于文件的访问时间、修改时间和状态改变时间来进行搜索。例如,find -atime -7
查找过去七天内被访问的文件。
搜索比特定文件新的文件
- 使用
find /home/virde -newer lsof.md
可以找出所有比lsof.md
文件更新的文件。
根据文件大小进行搜索
find /home/virde -size 2k
搜索所有大小大于等于2KB的文件。+2k
表示大于2KB,-2k
表示小于2KB。-delete
选项可以与大小条件结合使用,例如,find /home/virde -size -1k -delete
会删除所有小于1KB的文件。
find
命令与xargs
命令
find
命令常与xargs
命令一起使用,以对找到的文件执行命令。xargs
可以从标准输入接收数据,并将这些数据作为参数传递给其他命令。
基本使用案例
- 将
find
命令的输出传递给xargs
可以批量处理文件。例如,如果你想删除所有.tmp
文件,可以使用find . -name "*.tmp" | xargs rm
命令。
使用-print0
和-0
选项处理特殊文件名
- 在处理包含空格、换行符等特殊字符的文件名时,推荐使用
find
命令的-print0
选项与xargs
的-0
选项。这对选项使得文件名之间以null字符分隔,从而正确处理这些特殊字符。例如,find . -name "*.tmp" -print0 | xargs -0 rm
命令。
通过结合find
和xargs
命令,可以灵活地在Linux文件系统中搜索、过滤和批量操作文件,极大地提高工作效率。