我想删除一些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
的整个输出)
答案 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