rm 重定向

来源:互联网 发布:野口笑子 知乎 编辑:程序博客网 时间:2024/05/23 16:02

http://blog.sina.com.cn/s/blog_605f5b4f01014fna.html


ls -l|grep "ab"|rm 为什么错误!!!


你的命令是:ls -l|grep "ab"|rm.我想你的意思大概是找到目录下的文件中有“ab”字符的文件并将其删除,或是找到文件名中有“ab”的文件并将其删除。
ls -l。将显示(如果有二个文件):
total 915
-rw-r--r-- root root 3412 Mar 20:00 abcde.doc
-rw-r--r-- root root 324  Mar 15:00 df.doc
然后把它当做参数给grep.这是的输出将会是:
grep:1:-rw-r--r-- root 3421 Mar 20:00 abcde.doc
这是grep找到的符合有“ab”字符的那行。


解决的方法是把ls的-l选项去掉。将显示:
abcde.doc
df.doc
执行后还是不行。由于这里仅把ls的输出重定向,我们可以看作是把一个临时文件(其实并不是的)给了grep做参数,这个文件的内容是:abcde.doc df.doc。相当与在着个文件中寻找“ab”。对于这个文件将显示abced.doc。然后在把这个也看做是一个临时文件,传递给rm。也就是说用rm删除一个重定向,rm就执行不了了,因为rm不能拿重定向做参数   rm `ls|grep ab`才是正确的做法。

或者:对于grep后的结果 use xargs to turn standard input into arguments for rm

ls | grep '^Dar' | xargs rm
对于简单的没有使用正则表达式的删除,也可以直接使用 rm Dar*
0 0
原创粉丝点击