【转】exec xargs的区别 另附eval命令介绍
0$ ls
index.skin1 skin1
0$ find -type f -exec echo file {} \;
file ./skin1
file ./index.skin1
0$ ls
index.skin1 skin1
0$ find -type f | xargs echo
./skin1 ./index.skin1 0$ find . -name XXX | xargs cp -R --target-directory=/tmp
0$ find . -name XXX -exec cp -R {} /tmp \;
这里大家看到,xargs是把所有找到的文件名一股脑的转给命令。当文件很多时,这些文件名组合成的命令行参数很容易超长,导致命令出错。同时,这也是 find | xargs 这种组合在处理有空格字符的文件名时之所以出错的原因:这时执行的命令已经不知道这些空格那些是分割符、那些是文件名中所包含的!而用exec则不会有这两个问题。下面是一个演示:
0$ mkdir TEST
0$ cd TEST
/home/xyb/TEST
0$ touch "file a"
0$ touch "file b"
0$ ls
file a file b
0$ find -type f | xargs rm
rm: 无法删除‘./file’: 没有那个文件或目录
rm: 无法删除‘a’: 没有那个文件或目录
rm: 无法删除‘./file’: 没有那个文件或目录
rm: 无法删除‘b’: 没有那个文件或目录
0$ ls
file a file b
0$ find -type f -exec rm {} \;
0$ ls
0$
eval
命令格式:eval args
命令eval的功能是將参数(args)读入 C shell 中,然后在加以执行。例如:
0$ set vcom = 'ls -l ; date'
0$ $vcom
; not found
date not found
vcom 是 'ls -l ; date'。当我们来执行“$vocm”,会出现错误信息“; not found”及“date not found”。原因是 C shell 在语法解析中无法理解特殊符号所造成的。符号“;”和命令 date 被理解成是命令 ls -l 后的“文件名称”。所以才会有“not found”。命令eval 便是用来解决这种情況:
0$ eval $vcom
total 1
-r--r--r-- 1 akira 1296 Oct 12 07:29 search.c
Tue Oct 18 12:13:53 CST 1994
其实在作法上使用命令 eval 便相当于以下的用法:
0$ echo $vcom | csh
total 1
r--r--r-- 1 akira 1296 Oct 12 07:29 search.c
Tue Oct 18 12:13:54 CST 1994
如果你是在 C shell 下,你也可使用以下的方式:
/bin/csh << EOF
$vcom
EOF
另外在使用命令 eval 上也有技巧,看一互換的技巧:
0$ set a = '$b'
0$ set b = 'swapping'
0$ echo $a
$b
0$ eval echo $a
swapping
【转】exec xargs的区别 另附eval命令介绍的更多相关文章
- eval 与 exec, compile区别
exec 不是表达式: python 2. x, 中的一个语句和 python 3. x. 中的一个函数它编译并立即计算一个字符串中包含的语句或者语句集. 例如: exec('print(5)') # ...
- ASE存储过程和IQ存储过程的常见区别(附例子)
ASE存储过程和IQ存储过程的常见区别(附例子) 1 存储过程简介 存储过程(Stored Procedure)是为了完成特定的功能而汇集成一组的SQL语句集,并为该组SQL语句命名.经编译后存储在S ...
- 管道命令和xargs的区别(经典解释)
一直弄不懂,管道不就是把前一个命令的结果作为参数给下一个命令吗,那在 | 后面加不加xargs有什么区别 NewUserFF 写道: 懒蜗牛Gentoo 写道: 管道是实现"将前面的标准输出 ...
- 管道命令和xargs的区别
一直弄不懂,管道不就是把前一个命令的结果作为参数给下一个命令吗,那在 | 后面加不加xargs有什么区别NewUserFF 写道:懒蜗牛Gentoo 写道:管道是实现“将前面的标准输出作为后面的标准输 ...
- centos linux系统日常管理3 服务管理ntsysv,chkconfig,系统日志rsyslog,last ,lastb ,exec,xargs,dmesg,screen,nohup,curl,ping ,telnet,traceroute ,dig ,nc,nmap,host,nethogs 第十六节课
centos linux系统日常管理3 服务管理ntsysv,chkconfig,系统日志rsyslog,last ,lastb ,exec,xargs,dmesg,screen,nohup,cur ...
- (转载)管道命令和xargs的区别(经典解释)
一直弄不懂,管道不就是把前一个命令的结果作为参数给下一个命令吗,那在 | 后面加不加xargs有什么区别 NewUserFF 写道:懒蜗牛Gentoo 写道:管道是实现“将前面的标准输出作为后面的标准 ...
- 管道命令和xargs的区别(经典解释) 自己的总结
1. 简介 之所以能用到这个命令,关键是由于很多命令不支 持|管道来传递参数,而日常工作中有有这个必要, 所以就有了xargs命令,例如:find /sbin -perm +700 |ls -l 这个 ...
- 理解shell的eval命令
看以下两条命令:[zhangsan@XEN /sys]$ a="ls";b="\$a";c="$b";"$c"Hey! ...
- linux eval命令
eval 功能说明:重新运算求出参数的内容.语 法:eval [参数]补充说明:eval可读取一连串的参数,然后再依参数本身的特性来执行.参 数:参数不限数目,彼此之间用分号分开. 1.eval命令将 ...
随机推荐
- Java/JSP获得客户端网卡MAC地址的三种方法解析
java/jsp获得客户端(IE)网卡MAC地址的方法大概有三种. 1.通过命令方式,在客户端执行Ipconfig 等等.(java/jsp) 2.通过ActiveX的方法.(jsp) 3.通过向13 ...
- dll 显示调用
今天尝试写了一个简单的C++DLL,并且用另一个CPP调用它,啥都不说,先贴代码 1.DLL(冒泡算法) extern "C" 必须最左 _declspec(dllexport)和 ...
- ibatis.net:第八天,QueryForDictionary
xml <statement id="FindOrdersByCustomer" parameterClass="string" resultClass= ...
- 关于面试总结8-http协议相关面试题
前言 在PC浏览器的地址栏输入一串URL,然后按Enter键这个页面渲染出来,这个过程中都发生了什么事?这个是很多面试官喜欢问的一个问题 如果测试只是停留在表面上点点点,不知道背后的逻辑,是无法发现隐 ...
- SharePoint Online 创建资产库
前言 本文介绍如何在Office 365中创建资产库库,以及资产库的一些基本设置. 正文 通过登录地址登录到Office 365的SharePoint Online站点中,我们可以在右上角的设置菜单中 ...
- cocos2d-x 在输入文字时点击语音crash
修改CCDirectorCaller.mm文件 (cocos2dx/platform/ios/CCDirectorCaller.mm) 添加的代码: #import <OpenGLES/EA ...
- 抢票季:吐槽12306 & 分享抢票经验
又是一年一度的春运抢票季,不管你是北上.南下或者东进,在外漂泊了一年,有钱没钱总是要回家过年的. [图片来源于网络] 吐槽:12306抢票的悲伤 据说12306改版了,新版本里面除了UI这些面儿上的改 ...
- 用开源项目CropImage实现图片的裁剪(不推荐)
之前介绍过一个截图的办法(http://www.cnblogs.com/tianzhijiexian/p/3900241.html),这里再分享个开源项目.它也是截图,但是效果不是很好,首先还是 ...
- C# 获取文件的MIME类型
在C#中获取文件的MIME类型(Content Type)的方法如下 一.使用MimeMapping类 在System.Web程序集中,当前为静态类,就一个获取 // // 摘要: // 映射文档扩展 ...
- C#与Java的语法差异
C#与Java的语法差异C与Java的语法差异前言程序结构基本语法数据类型字符串变量与常量运算符判断语句循环语句访问权限方法数组结构枚举类继承多态运算符重载接口命名空间预处理器指令正则表达式异常IO泛 ...