lesson4 Linux 文件查找 find
发布日期:2021-05-07 03:26:06 浏览次数:16 分类:精选文章

本文共 2099 字,大约阅读时间需要 6 分钟。

一、 命令功能: 从指定的查找范围开始,递归查找子目录,对于满足条件的文件或目录,执行规定的动作。

二、 命令格式: find [搜索路径]  [选项]  [动作选项]

   示例:find path1 path2 -name *.c -print    根据名字递归查找path1和path2中以 .c 为后缀的文件或目录并打印

三、 命令选项:

   -name   文件名匹配

   -type   文件类型匹配 :f 普通文件、d 目录、l 链接文件、c 字符设备文件, b 块设备文件、 p 管道文件

   -inum   指定节点号

   -mtime  ± n  最后修改时间为现在的后/前 n 天

   -atime ± n   最近访问时间为现在的后/前 n 天 

         其它选项

    -user  文件主

    -group  用户组

    -depth  路径深度

    -maxdepth 最大搜索深度

    -perm 指定文件访问权限

    复合条件可以使用 !非、 \ 与、-o 或 

四、 动作选项:

        -print   打印查找到的路径

        -exec  对查找到的目标执行某一命令  -exec + [命令] + {} + \;   其中 {} 表示查找到的路径名,命令最后以 \; 结尾

        -ok      同 -exec ,但执行前要确认

五、 使用举例:

find. -type d -print
从当前目录开始查找,寻找所有目录,打印路径名
按层次列出当前的目录结构
 
find / -name 'stud*' -type d -print
指定了两个条件:名字与
stud*
匹配,类型为目录
两个
条件逻辑“与”
,必须同时符合这两个条件
 
find / -type f -
mtime
-10 -print
从根目录开始检索最近
10
天之内曾经修改过的普通磁盘文件
 

 

find . -
atime
+30 -
mtime
+30 -print
从当前目录开始检索最近
30
天之内既没有读过,也没有写过,而且也没有被当作命令执行过的文件
筛选出一个时间周期内不活跃的文件
 
find  .  !  -type d -links +2 -print
从当前目录开始检索
link
数大于
2
的非目录文件
条件“非”
用!
注意:
!
号与
-type
之间必须保留一空格
 

 

找出 
lyj 
用户主目录下所有的
.txt
文件并删除
find
/home/
lyj
-name "*.txt" -ok
rm
{}
\;
上例中,
-ok
-exec
行为一样,不过它会给出提示,是否执行相应的操作。
 
查找当前目录下所有
.txt
文件并把他们拼接起来写入到
all.txt
文件中  
find . -type f -name “*.txt” -exec cat {} \;> all.txt
 
       
将30天前的.log文件移动到old目录中
find . -type f -
mtime
+30 -name "*.log" -exec cp {} old \;  
 

 

find / -size +100000c \( -name core -o   -name '*.
tmp
' \) -print
 
寻找
大于
100K
的名
core
或有
.
tmp
后缀
使用了两
条件“或”
(-
o
)
及组合
(
圆括号
)
不要遗漏了所必需的引号,反斜线和空格,尤其是圆括号前和圆括号后。圆括号
shell
特殊字符
 
其他写法

find / -size +100000c '(' -name core -o -name \*.tmp ')' -print

find / -size +100000c  \( -name core –o -name \*.tmp ')' -print

 

find / -name make -print -exec ls -l {} \;
 
-exec
及随后的分号之间的内容作为一条命令执行
shell
中分号有特殊含义,前面加反斜线
\
{}
代表所查到的符合条件的路径名。注意,两花括号间无空格,之后的空格不可省略
对所有满足条件的文件或目录,依次执行
print
exec
命令
 
-ok
选项在执行指定的命令前等待用户确认
 
find / -size +100000c \( -name core -o name '*.
tmp
' \) -ok rm {} \
 

利用find的递归式遍历目录的功能

 
将当前目录下所有文件拷贝到目录
../
bak
 
执行
cp * ../
bak
命令:如果当前目录下文件太多
shell
扩展*时失败,从而不能执行期望的功能
 
find
命令与
cp
命令配合工作
find . -type f -
maxdepth
1 -exec cp {} ../
bak
\;
选项
-
maxdepth
1
find
的搜索深度限制为最多
1
层,如果当前目录有子目录,就不再检索子目录

 

 
上一篇:Lesson5 Linux 文件归档与压缩命令 tar、compress、uncompress
下一篇:关于 windows 下 jupyter notebook 无法自动打开浏览器的解决办法

发表评论

最新留言

初次前来,多多关照!
[***.217.46.12]2025年04月05日 07时52分38秒