Linux的find命令使用指南及实际shell用例
- 基本语法
- 常用选项
- 实际shell用例
find
命令是Linux和UNIX系统中一个非常强大的工具,它用于在指定目录下根据给定条件搜索文件。find
命令功能强大,使用灵活,可以组合多种条件和选项来精确查找文件,并对查找到的文件执行指定的操作。
基本语法
find
命令的基本语法如下:
find [pathname] [options] [operands]
-
pathname
:指定要查找的文件所在的目录。如果不指定,默认从当前目录开始。 -
options
:指定查找的条件,如文件名、文件类型、大小、修改时间等。 -
operands
:指定对查找到的文件执行的操作,如打印文件名、删除文件等。
常用选项
-
按名称查找:
-
-name "字串"
:查找文件名匹配所给字串的所有文件,支持通配符*
、?
、[]
。 -
-iname "字串"
:忽略大小写地查找文件名匹配所给字串的所有文件。 -
-lname "字串"
:查找文件名匹配所给字串的所有符号链接文件。
-
-
按文件类型查找:
-
-type x
:查找类型为x的文件,x可以是以下字符之一:-
b
:块设备文件 -
c
:字符设备文件 -
d
:目录文件 -
p
:命名管道(FIFO) -
f
:普通文件 -
l
:符号链接文件 -
s
:socket文件
-
-
-
按文件大小查找:
-
-size n[bckw]
:查找指定文件大小的文件,n后面的字符表示单位,缺省为b(512字节的块)。
-
-
按修改时间查找:
-
-mtime n
:查找n天以前被修改过的所有文件。 -
-amin n
:查找n分钟以前被访问过的所有文件。 -
-cmin n
:查找n分钟以前文件状态被修改过的所有文件。 -
-mmin n
:查找n分钟以前文件内容被修改过的所有文件。
-
-
按文件权限查找:
-
-perm 权限
:查找具有指定权限的文件和目录,权限的表示可以如711,644。
-
-
按用户和组查找:
-
-user '字串'
:查找属于用户名为所给字串的所有的文件。 -
-group '字串'
:查找属于用户组名为所给字串的所有的文件。 -
-uid n
:查找属于ID号为n的用户的所有文件。 -
-gid n
:查找属于ID号为n的用户组的所有文件。
-
-
按路径名查找:
-
-path '字串'
:查找路径名匹配所给字串的所有文件,字串内可用通配符*
、?
、[]
。
-
-
其他常用选项:
-
-empty
:查找大小为0的目录或文件。 -
-print
:将搜索结果输出到标准输出。 -
-exec command {} \;
:对查找到的文件执行指定的shell命令。
-
实际shell用例
- 在当前目录及子目录下查找以.txt结尾的文件:
find . -name "*.txt"
- 查找当前目录下大于1M的文件:
find . -size +1M
- 查找当前目录下的普通文件:
find . -type f
- 查找1天内修改过的文件:
find . -mtime -1
- 查找权限为644的文件:
find . -perm 644
- 查找属于特定用户的文件:
find . -user username
- 组合多个条件查找:
find . -size +500k -name "*.zip" -mtime -10
- 对查找到的文件执行删除操作:
find . -name "*.tmp" -exec rm -f {} \;
- 查找并删除特定目录下的过期文件:
find /path/to/search -name "*.tmp" -mtime +30 -exec rm {} \;
- 查找并压缩文件:
find . -size +1M -exec gzip {} \;
- 查找并列出特定目录下的所有目录:
find /path/to/search -type d
- 忽略特定目录进行查找:
find . -path './src/emacs' -prune -o -print
- 按深度搜索:
find . -maxdepth 1 -name "*sql"
- 查找并显示文件内容:
find . -name 'main*' -exec more {} \;
- 查找隐藏文件:
find $HOME -type f -name ".*"
通过组合不同的选项和表达式,find
命令可以完成各种复杂的文件查找任务。在实际使用中,可以根据具体需求灵活运用这些选项来满足不同的查找需求。