我的系统上有一个奇怪的文件。当我寻找一个名字时(让我们说foo),我明白了:
kilojoules@kilojoules:~$ ls|grep "foo"
foo
foo foo
kilojoules@kilojoules:~$
我无法删除文件" foo foo"不删除:foo:。是否可以只将一个grep输出管道输出到xargs?类似ls|grep "foo"|xargs[1] rm
或ls|grep "foo" [1]|xargs rm
答案 0 :(得分:2)
使用双引号或单引号来封装您的参数:
rm "foo foo"
rm 'foo foo'
你也可以引用空格:
rm foo\ foo
如果您的文件参数以-
开头,请在其前面添加额外的--
,以防止rm
将其解释为无效选项:
rm -- "--foo"
见Quoting。或者更好的是整个Basic Shell Features部分。
答案 1 :(得分:1)
@konsolebox建议的内容绝对简单,甚至我也经常这样做,但在* nix系统中,你总是可以期待奇怪的文件名,即使不是不可能使用双/单引号方法删除也很困难。对于这种情况,最好找到inode number
然后使用find
命令删除它。 find
命令有delete
开关用于此类目的。
[gc@slave ~]$ ls -li
total 8
19214 -rw-rw-r-- 1 gc gc 0 Aug 10 11:35 foo
35660 -rw-rw-r-- 1 gc gc 0 Aug 10 11:35 foo foo
[gc@slave ~]$ find . -type f -inum 35660 -delete
[gc@slave ~]$ ls -ltr
total 8
-rw-rw-r-- 1 gc gc 0 Aug 10 11:35 foo
答案 2 :(得分:0)
您可以使用tail
选择最后一行:
ls *foo* | tail -n 1 | xargs rm
或者您可以使用sed
打印第二个:
ls *foo* | sed -n 2p | xargs rm
或者您可以按内容grep
将其删除:
ls *foo* | grep 'foo.*foo' | xargs rm
这些恶作剧都不是真的有必要,而且所有这些都属于discouraged practice of parsing ls
output,但是回答你的问题希望教你一些关于管道的事情。