Linux shell 脚本攻略学习笔记2
来源:互联网 发布:手机淘宝优惠券链接 编辑:程序博客网 时间:2024/04/30 06:56
find是Unix/Linux命令行工具箱中最棒的工具之一。该命令对于编写shell脚本所起到的功用不可小视,今天来讨论一波find的大多数常见用法。
(1)要列出当前目录及子目录下所有文件和文件夹,可以采用下面的写法
$ find base_path例如:
此外,还有如下命令:
$find . -print. 指定当前目录,.. 指定父目录。这是Unix文件系统中的约定用法。
- print 指明打印出匹配文件的文件名(路径)。当使用 -print时,'\n'作为用于对输出的文件名进行分割。就算你忽略-print,find命令仍然会打印出文件名。
-print0 指明使用'\0' 作为匹配的文件名之间的定界符。
(2): 根据文件名或正则表达式进行搜索
来看一条命令:
$ find path -name "*.txt" -print其中 path为指定的路径,参数-name指定了文件名多必须匹配的字符串。我们可以将通配符作为参数使用。 "*.txt"能够匹配所有以.txt结尾的文件。
例:
find 命令还有一个选项 -iname(忽略字母大小写),改选项的作用和-name 类似,只不过在匹配名字时会忽略大小写。
如果想匹配多个条件的一个,可以采用or条件来操作
例:要想打印 scriptes 下 所有的 .txt和.log文件则:
\( 和 \) 用于 将 -name "*.txt" -o -name "*.log" 视为一个整体。 另外 -path的参数可以使用通配符来匹配文件路径。例如:
$ find /home/users -path "*/slynux/*" -print上述命令会以下匹配:
/home/users/list/slynux.txt
/home/users/slynux/eg.css
再来看-regex参数,他是基于正则表达式来匹配文件路径的。而 -iregex可以让正则表达式忽略大小写。
例:
aaa文件夹下有以下文件:
通过正则表达式匹配.py文件:
若用-iregex,则会匹配到new.PY和test.py:
2:否定参数
find 也可以用 "!" 否定参数的含义。例如
$ find . ! -name "*.txt" -print上面的find的命令能够匹配所有不以.txt结尾的文件名。下面就是这个命令的运行结果
(3):基于目录深度的搜索
find命令在使用时有时会遍历所有子目录,我可以采用深度选项 -maxdepth 和 -mindepth来限制find命令遍历的目录深度。
大多数情况下,我们只需要在当前目录中进行搜索,无序再继续向下查找。对于这种情况,我们使用深度选项来限制find命令向下查找的深度。如果只允许find在当前目录中查找,深度可以设置为; 当需要向下两级时,深度可以设置为2,其他情况一次类推。 例:
$ find . -maxdepth 1 -name "f*" -print该命令列出当前目录下的文件名以f打头的文件。即使有子目录,也不会被打印或遍历。与之类似,-maxdepth 2 最多向下遍两级子目录。
(4)根据文件类型进行搜索:
Unix 类系统将一切都视为文件。文件具有不同的类型,例如普通文件,目录,字符设备,块设备,符号链接,硬链接,套接字以及FIFO等。
-type 可以对文件搜索进行过滤,借助这个选项,我们可以为find 命令指明特定的文件匹配类型。
只列出所有的目录:
$ find . -type d print列出普通文件:
$ find . -type f print
只列出符号链接:
$ find . -type l -print
(5)根据文件时间进行搜索
Unix/Linux 文件系统中的每一个文件都有三种时间戳,如下所示。
(a):访问时间(-atime): 用户最近一次访问文件的时间。
(b): 修改时间(-mtime): 文件内容最后一次被修改的时间。
(c):变化时间(-ctime): 文件元数据(例如权限或所有权) 最后一次改变的时间。
-atime , -mtime, -ctime 可以作为find 的时间选项。它们可以用整数值指定,单位是天,这些整数值通常还带有-或+: -表示小于,+表示大于。
例:
打印出在最近7天内被访问过的所有文件:
$ find . -type f -atime -7 -print打印出恰好在7天前被访问过的所有文件:
$ find . -type f -atime 7 -print打印出访问时间超过7天的所有文件:
$ find . -type f -atime +7 -print
find 另一个漂亮的特性是 -newer参数。 使用-newer,我么可以指定一个用于比较时间戳的参考文件,然后找出比参考文件更新的所有文件。
例:找出比file.txt修改时间更近的所有文件:
$ find . - type f -newer file.txt -print
(6): 基于文件大小的搜索
根据文件的大小,可以这样搜索
$ find . -type f -size +2k#大于2k的文件
$ find . -type f -size -2k#小于2k的文件
find . -type f -size 2k#大小等于2k的文件
(7): 删除匹配的文件
-delete 可以用来删除find查找到的匹配文件
删除当前目录下所有的.swp文件
$ find . -type f -name "*.swp" -delete(8):基于文件权限所有权的匹配
也可以根据文件权限进行文件匹配
find . type f -name -perm 644 -print
-perm指明find应该只匹配具有特殊权限值得文件。
- Linux shell 脚本攻略 学习笔记-2
- Linux shell 脚本攻略学习笔记2
- Linux Shell脚本攻略学习笔记
- Linux Shell 脚本攻略 学习笔记-1
- Linux shell 脚本攻略 学习笔记-3
- linux shell 脚本攻略 学习笔记-4
- Linux shell 脚本攻略 学习笔记-5
- Linux shell 脚本攻略 学习笔记-6
- Linux shell 脚本攻略 学习笔记-7
- Linux shell 脚本攻略 学习笔记-8
- Linux shell 脚本攻略 学习笔记-9
- 《Linux shell脚本攻略》学习笔记
- Linux shell 脚本攻略学习笔记1
- Linux shell脚本学习攻略笔记3
- Linux shell 脚本攻略学习笔记4
- Linux shell 脚本攻略学习笔记5
- Linux shell 脚本攻略学习笔记6
- linux shell脚本攻略笔记
- 解决接口不能传参问题
- 2017年省赛前最后一水---K题
- 状态栏,Dock部件
- Android开发之强制横屏和强制竖屏
- Buffer类的详解
- Linux shell 脚本攻略学习笔记2
- Netty5.0使用简单介绍
- CentOS7搭建Docker私有仓库
- 获取MySQL配置文件路径
- 网站站长如何做好网站的搜索引擎优化
- **UE4 插件编译及使用的问题**
- Java的自动装箱和自动卸载
- Android 本地广播LocalBroadcastManager原理分析
- Linux驱动概念扫盲篇