删除最后两行' ls'产量

时间:2016-12-01 16:43:39

标签: bash

我想删除一些docker镜像的修订版。我想删除最后两行。我能用以下内容打印最后两行:

ls -lt | tail -n 2

给出了最后两行。

drwxr-xr-x 2 root root 4096 Nov  9 10:56 541a303d3c82785293f89a401038ac33ef2b54b6aeb09efd3d3bda7xxxx
drwxr-xr-x 2 root root 4096 Oct 25 12:07 c74e1399c99de0c23517abc95bc9b16d09df5c4d518776e77d9ae67xxxx

现在是我的问题。我该如何删除它们?

我尝试了ls -lt | tail -n 2 | rm -r *,但我删除了所有内容(ls的整个输出)

3 个答案:

答案 0 :(得分:2)

你可以让它发挥作用。我可能会使用类似rm -rf $(ls -t | tail -n2)的内容,但parsing ls is really not recommended

更简洁的方法是使用find。您可以使用它在某个时间之前删除所有内容。这样的事情:find . -mtime -180 -exec rm -f {} \;将删除比180天前更新的所有内容。

我强烈建议您在实际删除之前测试您计划运行的任何内容!像find . -mtime -180 -exec echo removing {} \;之类的东西可以解决问题。

答案 1 :(得分:1)

你有正确的想法;但是,“rm”之后的任何内容都会被删除,这就是为什么*删除了所有内容而不是你想要输入的内容。

这是一个非常干净的方式来做到这一点

    rm `ls | tail -n 2`

答案 2 :(得分:0)

仅供测试:

 ls -t | tail -n 2 | xargs -i -t echo {}
  

-t, - verbose          在执行标准错误输出之前打印命令行。

测试完成后,您可以使用以下命令删除它们:

ls -t | tail -n 2 | xargs -i -t rm -fr {}

rm -fr 541a303d3c82785293f89a401038ac33ef2b54b6aeb09efd3d3bda7xxxx 
rm -fr c74e1399c99de0c23517abc95bc9b16d09df5c4d518776e77d9ae67xxxx