Linux下find命令在目录结构中搜索文件,并执行指定的操作
Linux下find命令在目录结构中搜索文件,并执行指定的操作。Linux下find命令提供了相当多的查找条件,功能很强大。由于find具有强大的功能,所以它的选项也很多,其中大部分选项都值得我们花时间来了解一下。即使系统中含有网络文件系统( NFS),find命令在该文件系统中同样有效,只你具有相应的权限。 在运行一个非常消耗资源的find命令时,很多人都倾向于把它放在后台执行,因为遍历一个大的文件系统可能会花费很长的时间(这里是指30G字节以上的文件系统)。
1.命令格式:
find pathname -options [-print -exec -ok …]
2.命令功能:
用于在文件树种查找文件,并作出相应的处理
3.命令参数:
pathname: find命令所查找的目录路径。例如用.来表示当前目录,用/来表示系统根目录。
-print: find命令将匹配的文件输出到标准输出。
-exec: find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为’command’ { } \;,注意{ }和\;之间的空格。
-ok: 和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。
4.命令选项:
-name 按照文件名查找文件。
-perm 按照文件权限来查找文件。
-prune 使用这一选项可以使find命令不在当前指定的目录中查找,如果同时使用-depth选项,那么-prune将被find命令忽略。
-user 按照文件属主来查找文件。
-group 按照文件所属的组来查找文件。
-mtime -n +n 按照文件的更改时间来查找文件, - n表示文件更改时间距现在n天以内,+ n表示文件更改时间距现在n天以前。find命令还有-atime和-ctime 选项,但它们都和-m time选项。
-nogroup 查找无有效所属组的文件,即该文件所属的组在/etc/groups中不存在。
-nouser 查找无有效属主的文件,即该文件的属主在/etc/passwd中不存在。
-newer file1 ! file2 查找更改时间比文件file1新但比文件file2旧的文件。
-type 查找某一类型的文件,诸如:
b - 块设备文件。
d - 目录。
c - 字符设备文件。
p - 管道文件。
l - 符号链接文件。
f - 普通文件。
-size n:[c] 查找文件长度为n块的文件,带有c时表示文件长度以字节计。-depth:在查找文件时,首先查找当前目录中的文件,然后再在其子目录中查找。
-fstype:查找位于某一类型文件系统中的文件,这些文件系统类型通常可以在配置文件/etc/fstab中找到,该配置文件中包含了本系统中有关文件系统的信息。
-mount:在查找文件时不跨越文件系统mount点。
-follow:如果find命令遇到符号链接文件,就跟踪至链接所指向的文件。
-cpio:对匹配的文件使用cpio命令,将这些文件备份到磁带设备中。
另外,下面三个的区别:
-amin n 查找系统中最后N分钟访问的文件
-atime n 查找系统中最后n*24小时访问的文件
-cmin n 查找系统中最后N分钟被改变文件状态的文件
-ctime n 查找系统中最后n*24小时被改变文件状态的文件
-mmin n 查找系统中最后N分钟被改变文件数据的文件
-mtime n 查找系统中最后n*24小时被改变文件数据的文件
5.使用实例:
实例1:查找指定时间内修改过的文件
命令:
find -atime -2
输出:
[root@peidachang ~]# find -atime -2
.
./logs/monitor
./.bashrc
./.bash_profile
./.bash_history
说明:
超找48小时内修改过的文件
实例2:根据关键字查找
命令:
find . -name ”.log”
输出:
[root@localhost test]# find . -name ”.log”
./log_link.log
./log2014.log
./test4/log3-2.log
./test4/log3-3.log
./test4/log3-1.log
./log2013.log
./log2012.log
./log.log
./test5/log5-2.log
./test5/log5-3.log
./test5/log.log
./test5/log5-1.log
./test5/test3/log3-2.log
./test5/test3/log3-3.log
./test5/test3/log3-1.log
./test3/log3-2.log
./test3/log3-3.log
./test3/log3-1.log
说明:
在当前目录查找 以.log结尾的文件。 ”. ”代表当前目录
实例3:按照目录或文件的权限来查找文件
命令:
find /opt/soft/test/ -perm 777
输出:
[root@localhost test]# find /opt/soft/test/ -perm 777
/opt/soft/test/log_link.log
/opt/soft/test/test4
/opt/soft/test/test5/test3
/opt/soft/test/test3
说明:
查找/opt/soft/test/目录下 权限为 777的文件
实例4:按类型查找
命令:
find . -type f -name ”.log”
输出:
[root@localhost test]# find . -type f -name ”.log”
./log2014.log
./test4/log3-2.log
./test4/log3-3.log
./test4/log3-1.log
./log2013.log
./log2012.log
./log.log
./test5/log5-2.log
./test5/log5-3.log
./test5/log.log
./test5/log5-1.log
./test5/test3/log3-2.log
./test5/test3/log3-3.log
./test5/test3/log3-1.log
./test3/log3-2.log
./test3/log3-3.log
./test3/log3-1.log
[root@localhost test]#
说明:
查找当目录,以.log结尾的普通文件
实例5:查找当前所有目录并排序
命令:
find . -type d | sort
输出:
[root@localhost test]# find . -type d | sort
.
./scf
./scf/bin
./scf/doc
./scf/lib
./scf/service
./scf/service/deploy
./scf/service/deploy/info
./scf/service/deploy/product
./test3
./test4
./test5
./test5/test3
[root@localhost test]#
实例6:按大小查找文件
命令:
find . -size +1000c -print
输出:
[root@localhost test]# find . -size +1000c -print
.
./test4
./scf
./scf/lib
./scf/service
./scf/service/deploy
./scf/service/deploy/product
./scf/service/deploy/info
./scf/doc
./scf/bin
./log2012.log
./test5
./test5/test3
./test3
[root@localhost test]#
说明:
查找当前目录大于1K的文件

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
linux一些基本指令
pwd -p:显示出正确的路径 而不是连接档 mkdir: 建立目录的话 如果你想建立mkdir /home/test1/test2 可以直接加参数mkdir -p jiu 不需要一层一层创建了 rmdir:原本的话目录是需要一层一层来删除的,被删除的目录中不能有其他的目录或者文档 如果你想要直接删除的可以用rm -r test 这样 另外 如果你想删除上层的目录的话 加上-p ls:环境变量的作用 本来ls命令在/bin/ls下的 但是为什么我在任何地方都能执行ls呢,因为环境变量! echo $PATH 显示path环境变量 问:如果你mv /bin/ls /root 移动到了root下 即时你现在在root下面,那么你也不能直接执行ls命令,因为这时候你想执行的话: 1 直接用绝对路径指向 /root/ls 2 ./ls 这样 如果想在任何目录都可以执行/root下的ls 吧root假如PATH PATH=“$PATH”:/root 问:如果我有2个ls 在不同的目录中 比如/usr/local/bin/ls 和 /bin/ls 哪个ls会被执行。 答:PATH中哪个目录先被查询...
- 下一篇
查看虚拟机里的Centos7的IP
这里之所以是查看下IP ,是我们后面要建一个Centos远程工具Xshell 连接Centos的时候,需要IP地址,所以我们这里先 学会查看虚拟机里的Centos7的IP地址 首先我们登录操作系统 用户名root 密码 123456 然后我们输入ip查询命名 ip addr 也可以输入 ifconfig查看ip,但此命令会出现3个条目,centos的ip地址是ens33条目中的inet值。 发现 ens33 没有 inet 这个属性,那么就没法通过IP地址连接虚拟机。 接着来查看ens33网卡的配置: vi /etc/sysconfig/network-scripts/ifcfg-ens33 注意vi后面加空格 vi是Linux内置的文本编辑器命令 打开文件的意思 从配置清单中可以发现 CentOS 7 默认是不启动网卡的(ONBOOT=no)。 把这一项改为YES(ONBOOT=yes), 然后按 Esc 退出 再出入命令 :wq 再按Enter即可 (备注 :wq 是保存然后退出的意思 后面会专门讲下vi) 然后重启网络服务: sudo service network resta...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8编译安装MySQL8.0.19
- Docker安装Oracle12C,快速搭建Oracle学习环境
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- SpringBoot2全家桶,快速入门学习开发网站教程
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- 设置Eclipse缩进为4个空格,增强代码规范