我想找到一些目录并删除除最新的 10 个目录之外的所有目录。
我可以find . -maxdepth 1 -type d -name "XXX*" | xargs rm -rf
,但那样会将它们全部删除。
我无法使用,head / tail
因为我不知道列表的长度。我想过将结果通过管道传输到wc -l
,然后从中减去 10,然后rm -rf
执行“操作”,但我不知道该怎么做……
到目前为止我想到的是这样的:
find . -maxdepth 1 -type d -name "XXX*" | # get the dirs list
wc -l | # count number
xargs -I{} expr {} - $(find . -maxdepth 1 -type d -name "XXX*") # send number to xargs and try to use expr to subtract from it the tail of the find
我被困在了这一expr
部分,不知道如何把列表剪切到我想要的位置
答案1
给你:
find . -maxdepth 1 -type d -name "XXX*" -print0 | head -zn-10 | xargs -0 rm -rf
我已经测试过了,运行良好。注意,"."
如果-name "*"
从man head
:
-n, --lines=[-]NUM
打印前 NUM 行而不是前 10 行;以 '-' 开头,打印每个文件除最后 NUM 行之外的所有内容