如何将find语句搜出的文件,只find 显示隐藏文件其文件名,而不find 显示隐藏文件路径名

Linux下locate命令和find命令_Linux教程_Linux公社-Linux系统门户网站
你好,游客
Linux下locate命令和find命令
来源:Fedora社区&
作者:kwokwing0011
一:locate命令
locate命令用于查找文件,它比find命令的搜索速度快,它需要一个数据库,这个数据库由每天的例行工作(crontab)程序来建立。当我们建立好这个数据库后,就可以方便地来搜寻所需文件了。
即先运行:updatedb(无论在那个目录中均可,可以放在crontab中 )后在&& /var/lib/slocate/ 下生成 slocate.db 数据库即可快速查找。在命令提示符下直接执行#updatedb 命令即可:
例如:查找相关字issue
$ locate issue
/etc/issue
/etc/issue.net
/usr/man/man5/issue.5
/usr/man/man5/issue.net.5
二:find命令:
功能:在目录结构中搜索文件,并执行指定的操作。此命令提供了相当多的查找条件,功能很强大。
语法:find 起始目录 寻找条件 操作
说明:find命令从指定的起始目录开始,递归地搜索其各个子目录,查找满足寻找条件的文件并对之采取相关的操作。
该命令提供的寻找条件可以是一个用逻辑运算符not、and、or组成的复合条件。逻辑运算符and、or、not的含义为:
(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’ )
寻找条件有以下选项:
首先,下列各个选项中的n值可以有三种输入方式,假设n为20,则:
+20 表示20以后(21,22,23等)
-20 表示20以前(19,18,17等)
20 表示正好是20
1. 以名称和文件属性查找。
- name ’字串’ 查找文件名匹配所给字串的所有文件,字串内可用通配符*、?、[ ]。
- lname ’字串’ 查找文件名匹配所给字串的所有符号链接文件,字串内可用通配符*、?、[ ]。
-gid n 查找属于ID号为n的用户组的所有文件。
-uid n 查找属于ID号为n的用户的所有文件。
-group ’字串’ 查找属于用户组名为所给字串的所有的文件。
-user ’字串’ 查找属于用户名为所给字串的所有的文件。
-empty 查找大小为0的目录或文件。
-path ’字串’ 查找路径名匹配所给字串的所有文件,字串内可用通配符*、?、[ ]。
-perm 权限 查找具有指定权限的文件和目录,权限的表示可以如711,644。
-size n[bckw] 查找指定文件大小的文件,n后面的字符表示单位,缺省为b,代表512字节的块。
-type x 查找类型为x的文件,x为下列字符之一:
b 块设备文件
c 字符设备文件
d 目录文件
p 命名管道(FIFO)
f 普通文件
l 符号链接文件(symbolic links)
s socket文件
-xtype x 与-type基本相同,但只查找符号链接文件。
2. 以时间为条件查找
- amin n 查找n分钟以前被访问过的所有文件。
- atime n 查找n天以前被访问过的所有文件。
- cmin n 查找n分钟以前文件状态被修改过的所有文件。
- ctime n 查找n天以前文件状态被修改过的所有文件。
- mmin n 查找n分钟以前文件内容被修改过的所有文件。
- mtime n 查找n天以前文件内容被修改过的所有文件。
3. 可执行的操作
- exec 命令名称 {} 对符合条件的文件执行所给的Linux 命令,而不询问用户是否需要执行该命令。{}表示命令的参数即为所找到的文件;命令的末尾必须以“ ;”结束。
- ok 命令名称 { } 对符合条件的文件执行所给的Linux 命令,与exec不同的是,它会询问用户是否需要执行该命令。
- ls 详细列出所找到的所有文件。
- fprintf 文件名 将找到的文件名写入指定文件。
- print 在标准输出设备上显示查找出的文件名。
- printf 格式 格式的写法请参考有关C语言的书。
例1:查找当前目录中所有以main开头的文件,并显示这些文件的内容。
$ find . - name ‘main*’ - exec more {} ;
例2:删除当前目录下所有一周之内没有被访问过的a .out或*.o文件。
$ find . (- name a.out - o - name ‘*.o’)
& - atime +7 - exec rm {} ;
说明如下:
命令中的“.”表示当前目录,此时find将从当前目录开始,逐个在其子目录中查找满足后面指定条件的文件。(和)表示括号(),其中的“”称为转义符。之所以这样写是由于对Shell而言,(和)另有不同的含义,而不是这里的用于组合条件的用途。“- name a.out”是指要查找名为a.out的文件;“- name ‘*.o’”是指要查找所有名字以 .o结尾的文件。这两个- name之间的- o表示逻辑或(or),即查找名字为a.out或名字以 .o结尾的文件,find在当前目录及其子目录下找到这佯的文件之后,再进行判断,看其最后访问时间是否在7天以前(条件-atime +7),若是,则对该文件执行命令rm(- exec rm{ };)。其中{ }代表当前查到的符合条件的文件名,;则是语法所要求的。上述命令中第一行的最后一个是续行符。当命令太长而在一行写不下时,可输入一个,之后系统将显示一个&,指示用户继续输入命令。
相关资讯 & & &
& (04月30日)
& (10/09/:51)
& (07月14日)
& (11/15/:47)
& (03/09/:28)
   同意评论声明
   发表
尊重网上道德,遵守中华人民共和国的各项有关法律法规
承担一切因您的行为而直接或间接导致的民事或刑事法律责任
本站管理人员有权保留或删除其管辖留言中的任意内容
本站有权在网站内转载或引用您的评论
参与本评论即表明您已经阅读并接受上述条款
Edward 发表于 感觉linux超好玩的
(4) hh 发表于 gghg查看:5716|回复:12
一个文件夹下存在名为&a&和&a cmd&的两个文件,现想将这两个文件都加上执行权限,
执行如下命令:
find -name &*a*& | xargs -n1 chmod +x
结果出现错误:
chmod: cannot access `cmd': No such file or directory
貌似chmod +x收到的参数是a、a、cmd,后边的a和cmd没有作为一个整体。
求大家指点解决方法?
中级工程师
chmod +x -- &a cmd&
像你这样文章写的好,又懂音乐长得好看,柔情似水风度翩翩,又有礼貌的好孩子,说实话,我一个可以打十个!
复制内容到剪贴板代码:find -name &*a*& | xargs -i chmod +x {}
中级工程师
引用:原帖由 金兔儿 于
17:23 发表
find -name &*a*& | xargs -i chmod +x {} 版主V5,学习了。
-i&&替换字符串,将搜索的每一行内容作为一个整体处理了。
常上51CTO学习哦~
本帖最后由 bblxl2007 于
17:41 编辑
像你这样文章写的好,又懂音乐长得好看,柔情似水风度翩翩,又有礼貌的好孩子,说实话,我一个可以打十个!
中级工程师
另外,find一般和exec或ok组合使用,find -name &*a*& -exec chmod +x {} \;
像你这样文章写的好,又懂音乐长得好看,柔情似水风度翩翩,又有礼貌的好孩子,说实话,我一个可以打十个!
引用:原帖由 bblxl2007 于
21:37 发表
另外,find一般和exec或ok组合使用,find -name &*a*& -exec chmod +x {} \; 谢谢回复!学到了!
引用:原帖由 金兔儿 于
17:23 发表
find -name &*a*& | xargs -i chmod +x {} 谢谢版主回复!
得到版主的回复后,我对{}的用法不理解,
看了看man xargs,发现-i后边不指定替换字符串时相当于-I{},即版主给的命令可以改为如下:
& & & & find -name &*a*& | xargs -I{} chmod +x {}
继续阅读man xargs,明白了-I{}的意思是将chmod的参数(也就是+x {})中的{}替换为find命令的一条结果。
于是 ,我做了如下试验,将命令改为如下:
& & & & find -name &*a*& | xargs -Ianything chmod +x anything
同样,上述命令也是好用的。
然后,我在网上搜索,貌似很多时候习惯用{},
所以有个疑问:{}有没有什么特殊的意义?为什么要用{}?
中级工程师
{}:代码块,代表里面的是一个整体
将a cmd作为一个整体
这样,好理解么?
像你这样文章写的好,又懂音乐长得好看,柔情似水风度翩翩,又有礼貌的好孩子,说实话,我一个可以打十个!
引用:原帖由 bsiice 于
10:17 发表
谢谢版主回复!
得到版主的回复后,我对{}的用法不理解,
看了看man xargs,发现-i后边不指定替换字符串时相当于-I{},即版主给的命令可以改为如下:
find -name &*a*& | xargs -I{} chmod +x {}
继续阅读man xargs,明白了-I{} ... 我觉得就像常量一般用大写表示一样,约定俗成,大家都这么用。
或者再直白一点说,也许有其历史意义,不过我不知道- -
引用:原帖由 bblxl2007 于
11:27 发表
{}:代码块,代表里面的是一个整体
将a cmd作为一个整体
这样,好理解么? man xargs中有如下内容:
& && & -I replace-str
& && && && &&&Replace&&occurrences&&of&&replace-str&&in&&the initial-arguments with names read from standard input.&&Also, unquoted blanks do not t instead the separator is the newline
& && && && &&&character.&&Implies -x and -L 1.
根据“Also, unquoted blanks do not terminate input items”这句话,所以我理解,使a cmd作为一个整体的作用应该是-I这个OPTION起到的。
引用:原帖由 金兔儿 于
13:51 发表
我觉得就像常量一般用大写表示一样,约定俗成,大家都这么用。
或者再直白一点说,也许有其历史意义,不过我不知道- - {}出现的最让我疑惑的位置是在man xargs中的如下这段:
& && & -i[replace-str]
& && && && &&&This option is a synonym for -Ireplace-str if replace-str is specified, and for -I{} otherwise.&&This
use -I instead.
经过大家的帮助,我现在的理解,就是当{}是个字符串,大家都习惯用的字符串。
我也在网上看到了Bash Brace Expansion这个概念,有点把{}和这个概念搞不清,不过,我还是理解成字符串能理解通。
再次谢谢大家的帮助!
in return,我把我的鼓捣成果分享出来:
其实,我提问之前弄出了一个方法,不过我觉得繁琐,所以来提问了。之前的方法如下:
& & & & find -name &*a*& -printf &'%p'\n& | xargs chmod +x
就是利用printf来给find的每条结果两边加引号。
不过,当使用如下命令建立带引号的文件时,上述这些方法都不行了:
& & & & touch a a\ cmd \' \&
终极方法如下:
& & & & find -name &*& -print0 | xargs -0 chmod +x
参考man xargs中DESCRIPTION的第2段。
钻研精神值得鼓励
将搜索到的内容作为一个整体再替换受教了新手园地& & & 硬件问题Linux系统管理Linux网络问题Linux环境编程Linux桌面系统国产LinuxBSD& & & BSD文档中心AIX& & & 新手入门& & & AIX文档中心& & & 资源下载& & & Power高级应用& & & IBM存储AS400Solaris& & & Solaris文档中心HP-UX& & & HP文档中心SCO UNIX& & & SCO文档中心互操作专区IRIXTru64 UNIXMac OS X门户网站运维集群和高可用服务器应用监控和防护虚拟化技术架构设计行业应用和管理服务器及硬件技术& & & 服务器资源下载云计算& & & 云计算文档中心& & & 云计算业界& & & 云计算资源下载存储备份& & & 存储文档中心& & & 存储业界& & & 存储资源下载& & & Symantec技术交流区安全技术网络技术& & & 网络技术文档中心C/C++& & & GUI编程& & & Functional编程内核源码& & & 内核问题移动开发& & & 移动开发技术资料ShellPerlJava& & & Java文档中心PHP& & & php文档中心Python& & & Python文档中心RubyCPU与编译器嵌入式开发驱动开发Web开发VoIP开发技术MySQL& & & MySQL文档中心SybaseOraclePostgreSQLDB2Informix数据仓库与数据挖掘NoSQL技术IT业界新闻与评论IT职业生涯& & & 猎头招聘IT图书与评论& & & CU技术图书大系& & & Linux书友会二手交易下载共享Linux文档专区IT培训与认证& & & 培训交流& & & 认证培训清茶斋投资理财运动地带快乐数码摄影& & & 摄影器材& & & 摄影比赛专区IT爱车族旅游天下站务交流版主会议室博客SNS站务交流区CU活动专区& & & Power活动专区& & & 拍卖交流区频道交流区
白手起家, 积分 14, 距离下一级还需 186 积分
论坛徽章:0
如何将find语句搜出的文件,只显示其文件名,而不显示路径名。
如用 find . -name '#.c' -print
./proj/fall.89/paly.c
./proj/fall.89/refe.c
./rock/guess.c
如何才能将其只显示出如:
& &guess.c
而不显示出路径名。
请大侠们帮忙啊。。谢谢啊
&&nbsp|&&nbsp&&nbsp|&&nbsp&&nbsp|&&nbsp&&nbsp|&&nbsp
家境小康, 积分 1595, 距离下一级还需 405 积分
论坛徽章:0
如何将find语句搜出的文件,只显示其文件名,而不显示路径名
find . -name '#.c' -exec basename {} \;
白手起家, 积分 104, 距离下一级还需 96 积分
论坛徽章:0
如何将find语句搜出的文件,只显示其文件名,而不显示路径名
find . -name '#.c' -exec ls {} \;
白手起家, 积分 14, 距离下一级还需 186 积分
论坛徽章:0
如何将find语句搜出的文件,只显示其文件名,而不显示路径名
这样文件名是能取出来了,可是当我tar这个find找到的文件目录时,没了路径名,tar就找不到这个文件了。
能不能有个办法,find的时候还是包含路径名,但tar的时候,不把路径名显示出来。只显示文件名,不然tar之后的,tar里面的文件名都改成路径名/文件名的格式了。
白手起家, 积分 14, 距离下一级还需 186 积分
论坛徽章:0
如何将find语句搜出的文件,只显示其文件名,而不显示路径名
或者,也可以让tar的时候不加路径名。
如 tar -cvf tttt.tar test1/a2
如果这样的话,用tar -tvf tttt.tar里面文件的时候,该文件名改成了test1/a2
,而不是a2了。
怎么样才能不加路径名的tar呢??
在线等啊,急啊~~
家境小康, 积分 1059, 距离下一级还需 941 积分
论坛徽章:0
如何将find语句搜出的文件,只显示其文件名,而不显示路径名
为什么非要把路径去掉?
白手起家, 积分 121, 距离下一级还需 79 积分
论坛徽章:0
如何将find语句搜出的文件,只显示其文件名,而不显示路径名
原帖由 &daniel_82& 发表:
或者,也可以让tar的时候不加路径名。
如 tar -cvf tttt.tar test1/a2
如果这样的话,用tar -tvf tttt.tar里面文件的时候,该文件名改成了test1/a2
,而不是a2了。
怎么样才能不加路径名的tar呢??
在..........
把找到的文件全copy到一个目录,然后tar吧
白手起家, 积分 14, 距离下一级还需 186 积分
论坛徽章:0
如何将find语句搜出的文件,只显示其文件名,而不显示路径名
回答“为什么要把路径去掉”
如果不把路径去掉,那么tar之后里面的文件名不是改名了嘛?
其实,我现在用的方法就是把所以文件反正一个临时目录下,然后tar这个目录,可是这样会产生两种情况,其一,tar一个目录时,会多tar一个文件,这个文件是test1/,从第二开始才是test1/a2文件。不知道是怎么搞的。
其二:如果我硬盘空间不够大了,如果把需要tar的文件都临时存,势必需要2倍以上的空间,要是空间不够大,不是就tar不起来了嘛?
所以,还请大侠帮帮忙啊~
家境小康, 积分 1114, 距离下一级还需 886 积分
论坛徽章:1
如何将find语句搜出的文件,只显示其文件名,而不显示路径名
tar cf file.tar $(find /path -type f -name &*.c& -exec basename {} \;)复制代码
白手起家, 积分 14, 距离下一级还需 186 积分
论坛徽章:0
如何将find语句搜出的文件,只显示其文件名,而不显示路径名
[quote]原帖由 &寂寞烈火&][/quote 发表:
这个不行,你这个就是我前面说的那种情况啊?
你只把basename取出来,可是tar的时候就找不到路径了。> 问题详情
若磁盘上已存在某个文本文件,其全路径文件名为 d:\ncre\test.txt ,下列语句中不 能打开该文
悬赏:0&答案豆
提问人:匿名网友
发布时间:
若磁盘上已存在某个文本文件,其全路径文件名为 d:\ncre\test.txt ,下列语句中不 能打开该文件的是A . ifstream file("d:\ncre\test.txt") ;B . ifstream file("d:\ncre\test.txt");C . file.open("d:\ncre\test.txt");D . ifstream* pFile=new ifstream("d:\ncre\test.txt");请帮忙给出正确答案和分析,谢谢!
为您推荐的考试题库
您可能感兴趣的试题
1(27) 有如下类定义:class Foo{public:Foo(int v):value(v){} // ①~Foo(){} // ②private:Foo(){} // ③int value = 0; // ④};其中存在语法错误的行是A . ①B . ②C . ③D . ④2(28) 有如下类定义:class Point{int x_, y_;public:Point():x_(0), y_(0){}Point(int x, int y = 0):x_(x),y_(y){}};若执行语句Point a(2), b[3] , *c[4];则 Point 类的构造函数被调用的次数是A . 2 次B . 3 次C . 4 次D . 5 次&
我有更好的答案
请先输入下方的验证码查看最佳答案
图形验证:
验证码提交中……
找答案会员
享三项特权
找答案会员
享三项特权
找答案会员
享三项特权
选择支付方式:
支付宝付款
郑重提醒:支付后,系统自动为您完成注册
请使用微信扫码支付(元)
支付后,系统自动为您完成注册
遇到问题请联系在线客服QQ:
请您不要关闭此页面,支付完成后点击支付完成按钮
遇到问题请联系在线客服QQ:
恭喜您!升级VIP会员成功
常用邮箱:
用于找回密码
确认密码:- 最好的系统光盘下载网站!
当前位置: >
> 详细页面
Linux下使用find命令查找文件如何忽略某些目录
来源:系统之家
作者:qipeng
  在进行Linux命令操作的时候,有时会搜索出许多目录,而这些目录又不是我们所需要的,这时就可以将其忽略。下面小编就教大家如何使用find命令忽略子目录。
  使用find命令在linux系统中查找文件时,有时需要忽略某些目录,可以使用 -prune 参数来进行过滤。
  不过必须注意:要忽略的路径参数要紧跟着搜索的路径之后,否则该参数无法起作用。
  例如:指定搜索/home/zth目录下的所有文件,但是会忽略/home/zth/astetc的路径:
  代码如下:
  find /home/zth -path &/home/zth/astetc& -prune -o -type f -print
  按照文件名来搜索则为:
  代码如下:
  find /home/zth -path &/home/zth/astetc& -prune -o -type f -name &cdr_*.conf& -print
  要忽略两个以上的路径如何处理?
  代码如下:
  find /home/zth /( -path &/home/zth/astetc& -o -path &/home/zth/etc& /) -prune -o -type f -print
  find /home/zth /( -path &/home/zth/astetc& -o -path &/home/zth/etc& /) -prune -o -type f -name &cdr_*.conf& -print
  注意:/( 和/) 前后都有空格。
  查找某个文件包含内容,以下语句可以解决目录带空格的问题:
  代码如下:
  find 。/ -name &mysql*& -print0 |xargs -0 grep &SELECT lead_id FROM vicidial_list where vendor_lead_code&
  如果目录不带空格,可以这样:
  代码如下:
  find 。/ -name &mysql*& |xargs grep &SELECT lead_id FROM vicidial_list where vendor_lead_code&
  上面就是Linux下使用find命令查找文件时忽略子目录的方法介绍了,如果你需要用到相关操作,而又对find命令的使用不是很熟悉的话,不妨来了解下本文,希望对你有所帮助。
栏目热门教程
人气教程排行
热门系统下载
本站发布的系统与软件仅为个人学习测试使用,请在下载后24小时内删除,不得用于任何商业用途,否则后果自负,请支持购买微软正版软件!如侵犯到您的权益,请及时通知我们,我们会及时处理。
Copyright&2011 系统之家(www.xitongzhijia.net) 版权所有 闽ICP备号-1}

我要回帖

更多关于 sql语句find in set 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信