2016-07-21 189 views
2

我该如何执行以下命令?这是下面的伪代码,我有:如何删除unix中的X文件

ls -U | head -4 < rm * 

我想删除以下四个文件

[email protected]:/tmp$ ls -U | head -4 
c9e5aff2-f4f6-459e-9752-466625165fa0.jpg 
815626f8-2650-4596-94b9-796a82780390.jpg 
b9259a6b-b421-4b64-ba4d-72fd632703a3.jpg 
78c243e7-43df-417d-9dcf-a4578f1c1f20.jpg 
+2

这将永远不会工作。那会将'rm'的输出重定向为'head'的输入。 'ls | head -4 | xargs rm' xargs接受它的标准输入并把它变成指定命令的命令行参数。 –

+1

'ls -U'按目录顺序列出文件,这实质上是任意的。你确定这是你想使用的标准吗? –

+0

请注意,如果任何文件名包含空格或某些其他特殊字符,则两个当前答案都可能失败。 –

回答

3

xargs了应该做的伎俩:

$ ls -U | head -4 | xargs rm 
+0

尽管迄今为止列出的两种解决方案都有效,但这是优越的解决方案,因为xargs会将先前命令的输出流式传输到下一个 –

+1

@AmirAfghani的输入中。我的回答并不意味着要在电脑的性能上竞争,但如果你的记忆力和我的一样糟糕,那么这样做会节省时间。编写for循环通常比获取StackOverflow更快,并且确定如何去做。 :P –

2

如果你不记得庆典语法简单for循环往往像一个魅力:

for file in `ls -U | head -4`; do rm $file; done