linux命令:find命令
http://blog.csdn.net/pipisorry/article/details/39831419
linux find命令语法
find [起始文件夹] 寻找条件 操作
find PATH OPTION [-exec COMMAND { } \;]
因为find命令会依据我们给的option,也就是寻找条件从我们给出的文件夹開始对当中文件及其下子文件夹中的文件进行递归搜索。
寻找条件
该命令中的寻找条件能够是一个用逻辑运算符 not、and、or 组成的复合条件。
(1) and:逻辑与,在命令中用“-a”表示,是系统缺省的选项。表示仅仅有当所给的条 件都满足时,寻找条件才算满足。比如:
find –name ’tmp’ –xtype c -user ’inin’% 该命令寻找三个给定条件都满足的全部文件
(2) or:逻辑或,在命令中用“-o”表示。
该运算符表示仅仅要所给的条件中有一个满足 时,寻找条件就算满足。
比如:
find –name ’tmp’ –o –name ’mina*’% 该命令查询文件名称为’tmp’或是匹配’mina*’的全部文件。
(3) not:逻辑非。在命令中用“!”表示。该运算符表示查找不满足所给条件的文件 。比如:
find ! –name ’tmp’% 该命令查询文件名称不是’tmp’的全部文件。
说明:当使用非常多的逻辑选项时。能够用括号把这些选项括起来。
为了避免Shell本身对括号引起误解,在话号前须要加转义字符“\”来去除括号的意义。
例:
find \(–name ’tmp’ –xtype c -user ’inin’ \)
查询条件option參数
-name ’字串’ 查找文件名称匹配所给字串的全部文件,字串内可用通配符 *、?、[ ]。
-lname ’字串’ 查找文件名称匹配所给字串的全部符号链接文件,字串内可用通配符 *、?、[ ]。
-gid n 查找属于ID号为 n 的用户组的全部文件。
-uid n 查找属于ID号为 n 的用户的全部文件。
-group ’字串’ 查找属于用户组名为所给字串的全部的文件。
-user ’字串’ 查找属于username为所给字串的全部的文件。
-empty 查找大小为 0的文件夹或文件。
-path ’字串’ 查找路径名匹配所给字串的全部文件,字串内可用通配符*、?、[ ]。
-perm 权限 查找具有指定权限的文件和文件夹,权限的表示能够如711。644。
-size n[bckw] 查找指定文件大小的文件,n 后面的字符表示单位。缺省为 b,代表512字节的块。 -size +500M文件大小大于500M
-type x 查找类型为 x 的文件,x 为下列字符之中的一个:
b 块设备文件;c 字符设备文件。d 文件夹文件;p 命名管道(FIFO)
f 普通文件。l 符号链接文件(symbolic links)。s socket文件。-xtype x 与 -type 基本同样,但仅仅查找符号链接文件。
以时间为条件查找
-amin n 查找n分钟曾经被訪问过的全部文件。
-atime n 查找n天曾经被訪问过的全部文件。
-cmin n 查找n分钟曾经文件状态被改动过的全部文件。
-ctime n 查找n天曾经文件状态被改动过的全部文件。
-mmin n 查找n分钟曾经文件内容被改动过的全部文件。
-mtime n 查找n天曾经文件内容被改动过的全部文件。
-print:将搜索结果输出到标准输出。
样例:在root以及子文件夹查找不包括文件夹/root/bin的,greek用户的,文件类型为普通文件的,3天之前的名为test-find.c的文件。并将结构输出,find命令例如以下:
find / -name "test-find.c" -type f -mtime +3 -user greek -prune /root/bin -print
当然在这当中。-print是一个默认选项,我们不必刻意去配置它。
exec选项
-exec:对搜索的结构指令指定的shell命令。注意格式要正确:"-exec 命令 {} \;"
在}和\之间一定要有空格才行;
{}表示命令的參数即为所找到的文件;命令的末尾必须以“ \;”结束。
样例:对上述样例搜索出来的文件进行删除操作,命令例如以下:
find / -name "test-find.c" -type f -mtime +3 -user greek -prune /root/bin -exec rm {} \;
find命令指令实例:
find . - name ‘main*’ - exec more {} \; % 查找当前文件夹中全部以main开头的文件。并显示这些文件的内容。
find . \(- name a.out - o - name ‘*.o’\)> - atime +7 - exec rm {} \; % 删除当前文件夹下全部一周之内没有被訪问过的a .out或*.o文件。
% “\(” 和 “\)” 表示括号(),当中的 “\” 称为转义符。之所以这样写是因为对 Shell 而言,(和)另有不同的含义。而不是这里的用于组合条件的用途。
% “-name a.out” 是指要查找名为a.out的文件;
% “-name ‘*.o’” 是指要查找全部名字以 .o 结尾的文件。这两个 -name 之间的 -o 表示逻辑或(or),即查找名字为a.out或名字以 .o结尾的文件。
% find命令在当前文件夹及其子文件夹下找到这佯的文件之后,再进行推断,看其最后訪问时间 是否在7天曾经(条件 -atime +7),若是,则对该文件运行命令 rm(-exec rm {} \;)。
当中 {} 代表当前查到的符合条件的文件名称,\;则是语法所要求的。
% 上述命令中第一行的最后一个 \ 是续行符。当命令太长而在一行写不下时,可输入一个 \。之后系统将显示一个 >。指示用户继续输入命令。
find中使用正則表達式
find path -regex "xxx"
find path -iregex "xxx"
find . -regex '.*topic[0-9]+' #查找当前文件夹(包括子文件夹)下文件名称为topic+num的文件
使用演示样例
查找当前文件夹下大小>500M的文件及其大小
find . -size +500M | xargs du -ha
find . -size +100M ! -path "*git*" 文件路径中不包括git字样的文件
linux中find命令查找时不包括某些文件夹。find 命令忽略某个或多个子文件夹的方法
解决方式:
在linux中用find 进行查找的时候,有时候须要忽略某些文件夹不查找,能够使用 -prune 參数来进行过滤,要忽略的路径參数必须紧跟着搜索的路径之后,否则该參数无法起作用。
man find
...
-path pattern
File name matches shell pattern pattern. The metacharacters do
not treat `/' or `.' specially; so, for example,
find . -path "./sr*sc"
will print an entry for a directory called `./src/misc' (if one
exists). To ignore a whole directory tree, use -prune rather
than checking every file in the tree. For example, to skip the
directory `src/emacs' and all files and directories under it,
and print the names of the other files found, do something like
this:
find . -path ./src/emacs -prune -o -print
Note that the pattern match test applies to the whole file name,
starting from one of the start points named on the command line.
It would only make sense to use an absolute path name here if
the relevant start point is also an absolute path. This means
that this command will never match anything:
find bar -path /foo/bar/myfile -print
The predicate -path is also supported by HP-UX find and will be
in a forthcoming version of the POSIX standard.
...
也能够使用參数-wholename,只是不建议了
-wholename pattern
See -path. This alternative is less portable than -path.
-prune 使用这一选项能够使find命令不在当前指定的文件夹中查找。假设同一时候使用-depth选项,那么-prune将被find命令忽略。
还要注意 \( 前后都有空格
eg:
root@ubuntu:/tmp1#find ./ -type f #/tmp1文件夹下全部文件夹里面的全部文件
./file
./1/1.cpp
./2/2.cpp
root@ubuntu:/tmp1#find ./ -path ./1 -prune -o -type f -print #/tmp1中查找文件但忽略文件夹/1中的文件
./file
./2/2.cpp
root@ubuntu:/tmp1#find ./ \( -path ./1 -o -path ./2 \) -prune -o -type f -print #/tmp1中查找文件同一时候忽略文件夹/1 /2中的文件
./file
针对文件模式“./1”使用 -path(或者也能够-wholename) 測试。假设该模式已找到。-prune 可防止 find 下到该文件夹中。
find [-path ..] [expression] 在路径列表的后面的是表达式
-path ./1 -prune -o -print 是 -path ./1 -a -prune -o
布尔类型“-o”使 find 能够针对其它文件夹处理该命令的其余部分。因为每一个表达式之间有一个假设的隐式 and 运算符 (-a),因此,假设左側的表达式计算结果为 false,and 之后的表达式将不进行计算。因此须要 -o 运算符。
【详解:-print 的简写表达式按顺序求值, -a 和 -o 都是短路求值,与 shell 的 && 和 || 相似假设 -path ./1为真。则 求值-prune , -prune 返回真。与逻辑表达式... -a -prune为真;否则不求值 -prune。与逻辑表达式为假。
假设 -path ./1 -a -prune 为假,则求值 -print ,-print返回真,或逻辑表达式为真。否则不求值 -print,或逻辑表达式为真。】
-prune
else
find忽略多个文件夹
圆括号表示表达式的结合。
查找某一确定文件,-name等选项加在-o 之后
eg:统计我写了多少行c/c++代码:
root@ubuntu:/media/E/mine/C++#find ./ \( -path ./SvdFeature -o -path ./SvdFeatureDemo -o -path ./SvdFeatureInfer -o -path ./testSVD \) -prune -o \( -name '*.c' -o -name '*.cpp' -o -name '*.h' -type f \)-print| xargs wc -l | more
...
16867 总用量
from:http://blog.csdn.net/pipisorry/article/details/39831419
ref:Linux文件查找命令find
linux命令:find命令的更多相关文章
- Linux下history命令用法
如果你经常使用 Linux 命令行,那么使用 history(历史)命令可以有效地提升你的效率.本文将通过实例的方式向你介绍 history 命令的 15 个用法. 使用 HISTTIMEFORMAT ...
- Linux下ps命令详解 Linux下ps命令的详细使用方法
http://www.jb51.net/LINUXjishu/56578.html Linux下的ps命令比较常用 Linux下ps命令详解Linux上进程有5种状态:1. 运行(正在运行或在运行队列 ...
- 例解 Linux 下 Make 命令
Linux 下 make 命令是系统管理员和程序员用的最频繁的命令之一.管理员用它通过命令行来编译和安装很多开源的工具,程序员用它来管理他们大型复杂的项目编译问题.本文我们将用一些实例来讨论 make ...
- Linux 利用lsof命令恢复删除的文件
lsof命令 lsof命令用于查看你进程开打的文件,打开文件的进程,进程打开的端口(TCP.UDP).找回/恢复删除的文件.是十分方便的系统监视工具,因为lsof命令需要访问核心内存和各种文件,所以需 ...
- Linux终端打印命令使用介绍
常用linux打印命令 日常使用中或shell脚本中linux终端打印命令有echo和printf. echo命令 功能说明:显示文字.语 法:echo [-ne][字符串]或 echo [--he ...
- linux管道命令grep命令参数及用法详解---附使用案例|grep
功能说明:查找文件里符合条件的字符串. 语 法:grep [-abcEFGhHilLnqrsvVwxy][-A<显示列数>][-B<显示列数>][-C<显示列数>] ...
- Linux 定时任务 Crontab命令 详解
前言 crontab是Unix和Linux用于设置周期性被执行的指令,是互联网很常用的技术,很多任务都会设置在crontab循环执行,如果不使用crontab,那么任务就是常驻程序,这对你的程序要求比 ...
- Linux常用命令学习2---(文件搜索命令locate find、命令搜索命令whereis which、字符串搜索命令grep、帮助命令man)
1.文件搜索命令:locate [文件名] 在后台数据库中按文件名搜索,搜索速度比find快,耗费资源更少 例子:locate test.txt,就会显示文件名包含 test.txt的所 ...
- linux命令:crontab命令(转)
一.crond简介 二.crond服务 三.crontab命令详解 四.使用注意事项 linux系统是由 cron (crond) 这个系统服务来控制的.Linux 系统上面原本就有非常多的计划性工作 ...
- linux常用的命令
Linux简介及Ubuntu安装 Linux,免费开源,多用户多任务系统.基于Linux有多个版本的衍生.RedHat.Ubuntu.Debian 安装VMware或VirtualBox虚拟机.具体安 ...
随机推荐
- MySQL——基本安装与使用
基本安装 下载地址:https://dev.mysql.com/downloads/mysql/ 选择解压版本:mysql-5.7.21-winx64.zip 以管理员身份打开cmd(除了安装服务不要 ...
- 基于Crypto++的aes 字符串加解密实现
esaes.h: #ifndef ESAES_H #define ESAES_H #include <cryptopp/aes.h> #include <iostream> # ...
- Java软件开发中迭代的含义
软件开发中,各个开发阶段不是顺序执行的,而各个阶段都进行迭代并行执行的,然后在进入下一个阶段的开发. 这样对于开发中的需求变化,及人员变动都能得到更好的适应. 软件开发过程汇总迭代模型如下图所示:
- 【sqli-labs】 less61 GET -Challenge -Double Query -5 queries allowed -Variation4 (GET型 挑战 双查询 只允许5次查询 变化4)
http://192.168.136.128/sqli-labs-master/Less-61/?id=1' 单引号双括号闭合 192.168.136.128/sqli-labs-master/Les ...
- 【OpenCV】像素操作的数字图像处理
之前几天捣鼓matlab,用来处理数字图像,矩阵操作什么的,如果忘记线性代数就真的GG了. 在用了matlab被深深地吐槽之后,决定改用opencv,C++貌似也是处理数字图像的很好的工具 1. 在u ...
- POJ_1088_(dp)(记忆化搜索)
滑雪 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 95792 Accepted: 36322 Description ...
- CSS绝对定位模拟固定定位
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- 真机测试报错ERROR/AndroidRuntime: java.lang.RuntimeException: setParameters failed解决办法
这个错误是和调用相机摄像头相关的. 产生这个错误的原因主要在于代码控制分辨率的显示和真机测试分辨率不一样. 一:解决办法 WindowManager wm = (WindowManager) getS ...
- 我的第一个随笔——MarkDown的简单用法!
目录 我的第一个笔记 1. 学习简单的markdown语法 1.1 标题 1.2 引用 1.3 倾斜与加粗 1.4无序列表 1.5有序列表 1.6图片和网页 1.7分割线 1.8代码块 1.9结尾 2 ...
- slf4j-api、slf4j-log4j12、log4j的关系
在网上找到一篇关于这三个jar包的关系的博客,讲的很好,所以就转载了: https://blog.csdn.net/tengdazhang770960436/article/details/18006 ...