日期:2014-05-16  浏览次数:20700 次

rm与grep联合使用的问题
大家好,操作系统是Ubuntu,当前目录下有a.mp  sample1.aux  sample.aux这三个文件,现在我想把不是以.mp结尾的文件删除,先执行以下命令
ls -1 | grep -v  .*\\.mp
返回了不是以.mp结尾的文件名,显示如下
sample1.aux
sample.aux
前面再加上删除命令
rm `ls -1 | grep -v  .*\\.mp`
它不能删除文件sample1.aux  sample.aux,而是直接报"rm: 缺少操作数"的错误.这个问题困扰我好几天了,因为我已经多次这样删除文件了.哪位朋友给我指导下,万分感谢.

------解决方案--------------------
用find吧

find . -name "*.mp" 
------解决方案--------------------
 xargs rm -f


没有测试,应该没有问题。
------解决方案--------------------
你的方式有点问题

grep后  
------解决方案--------------------
 xargs rm吧
------解决方案--------------------


find . -name "*.mp" 
------解决方案--------------------
 xargs rm -rf 

------解决方案--------------------

find . -type f -name "*.aux" 
------解决方案--------------------
 rm -f 
or
ls -1 
------解决方案--------------------
 grep -v  .*\\.mp 
------解决方案--------------------
 rm -f 

------解决方案--------------------
1、ls命令的-1选项是多余的,改成:
ls 
------解决方案--------------------
 grep -v .*\\.mp

2、grep命令里面的.*\\.mp这种写法是不严谨的,继续改:
ls 
------解决方案--------------------
 grep -v "\.mp$"

3、传递给xargs命令进行删除:
ls 
------解决方案--------------------
 grep -v "\.mp$" 
------解决方案--------------------
 xargs rm -f

4、考虑到文件名可能包含空格:
ls 
------解决方案--------------------
 grep -v "\.mp$" 
------解决方案--------------------
 xargs -0 rm -f

5、没有必要的情况下,尽量不要使用rm命令的-r选项,比如3楼的写法是非常危险的。