问题讨论:程序 C/C++ Java GUI编程 ASP Php Shell Perl Web开发 软件工程 三大件 机箱 存储设备 光存储 音频设备 视频设备 外设 购机
asp php java C CGI .net vb delphi unix&linux sql Word Excel WPS OutLook Powerpoint Dreamweaver FPage/Golive CSS/HTML DOM/JS
热门词:流程图 excel 入侵检测 vss Windows 安全漏洞 QQ空间 事件编程 MFC

 程序设计交流 > Shell 

谁能讲讲find . -name "*.o" -exec rm -f {} \;这个命令的具体含义啊?

[2009-1-15 2:39:57] [来源: 百家电脑学院] [我要投稿]

2009-1-13 23:29皇家救星谁能讲讲find . -name "*.o" -exec rm -f {} \;这个命令的具体含义啊?

find . -name "*.*" -exec rm -f {} \;这个命令不知道shell是怎么解释的?

我知道
\;被解释成为;

{}就不知道是怎么解释

另find命令是怎么解释-exec后面接的参数的,是不是会自动把{}替换成找到的文件名?

;号的作用又是什么呢?
2009-1-13 23:29liaosnet回复 #1 皇家救星 的帖子

看一下下面的解释..

-exec command ;
Execute command; true if 0 status is returned. All following arguments to find are taken to be arguments to the command until an argument consisting of ';' is encountered. The string '{}' is replaced by the current file name being processed everywhere it occurs in the arguments to the command, not just in arguments where it is alone, as in some versions of find. Both of these constructions might need to be escaped (with a '\') or quoted to protect them from expansion by the shell. The command is executed in the starting directory.
2009-1-13 23:39xiaobaibbb这样估计你就把当前目录下的文件全删除了?
不懂怎么解释啊,反正好像是这样的,我去试试。
或者等哪个老大来讲解 ~
2009-1-13 23:41xiaobaibbb
原帖由 xiaobaibbb 于 2009-1-13 23:39 发表
这样估计你就把当前目录下的文件全删除了?
不懂怎么解释啊,反正好像是这样的,我去试试。
或者等哪个老大来讲解 ~ [/quote]

是的,是把当前目录下的东西都删除了~
root@debian:~# mkdir ttt
root@debian:~# cd ttt/
root@debian:~/ttt# touch a.rar
root@debian:~/ttt# touch a.b
root@debian:~/ttt# touch 1.2
root@debian:~/ttt# find . -name "*.*" -exec rm -f { } \;
root@debian:~/ttt# ls
root@debian:~/ttt#
2009-1-13 23:44皇家救星嗯,效果确实是把目录下的所有包含.的文件删除

不过这好像不是我提问的重点: )
2009-1-13 23:47liaosnet回复 #3 xiaobaibbb 的帖子

find . -name "*.*" -exec rm -f {} \;
的意思是 在当前目录下查找名为 "多个字符.多个字符" 的文件,然后删除它们..并不是所有文件...
2009-1-13 23:50haimming留给“我是DBA”吧,呵呵
2009-1-14 00:02xiaobaibbb..貌似我的DBA很出名哦~他很热心的!

不过你这样就把liaosnet的一切给否定了!

find . -name "*.*" -exec rm -f {} \;

查找find 当前目录 . 名字为-name 字符.字符 *.*的文件 传递命令 -exec 删除并不提示 -f 查找出来的文件名 { } 这个是转义吗? "\;"
;估计是结束的意思吧?
2009-1-14 00:12haimming回复 #8 xiaobaibbb 的帖子

断无此意!
只是猜测 liaosnet DX可能简单了点,不能满足LZ的求知欲,同时和DBA开个玩笑罢了

对了,不该把这里变成灌水区,我今天有些不像话,面墙去了


2009-1-14 00:13liaosnet回复 #8 xiaobaibbb 的帖子

语法上说 ;用来结束-exec 的命令的,由于;在shell中还有其他含义,故需要使用\将其含义去掉...
2009-1-14 00:15liaosnet回复 #9 haimming 的帖子

额..没事的..本来我就不经常来这个区..呵呵...来着看看..有略知道的就回答下下...错了也别怪我就行了.:em03: :em03:
2009-1-14 00:17xiaobaibbb
原帖由 liaosnet 于 2009-1-14 00:13 发表
语法上说 ;用来结束-exec 的命令的,由于;在shell中还有其他含义,故需要使用\将其含义去掉... [/quote]

那就是说 \;
\就是转义了!
;就是结束了!

谢谢解答!
2009-1-14 10:24fsm11[quote]原帖由 皇家救星 于 2009-1-13 23:29 发表
find . -name "*.*" -exec rm -f {} \;这个命令不知道shell是怎么解释的?

我知道
\;被解释成为;

{}就不知道是怎么解释

另find命令是怎么解释-exec后面接的参数的,是不是会自动把{}替换成找到的文件 ...




{} 就是保存 find . -name "*.*" 查找到的结果。
2009-1-14 10:29我是DBA[quote]原帖由 liaosnet 于 2009-1-14 00:13 发表
语法上说 ;用来结束-exec 的命令的,由于;在shell中还有其他含义,故需要使用\将其含义去掉...


廖大师所言极是。。。
我是来跑过的。
2009-1-14 18:26皇家救星谢谢各位了 

原来{}并不会被shell特殊解释


我以为会呢:mrgreen:
2009-1-14 18:42apachyfind自己有delete功能:

find . -name "*.*" -delete

该篇文章来源:百家学院 (www.9php.com),复制请注明.

·谁能讲讲find . -name "*.o" -exec rm -f {} \;这个命令的具体含义啊? | 相关文章·

·百家学院 | 最新评论·