如何从 find 中删除除最后 X 个项目之外的所有项目

如何从 find 中删除除最后 X 个项目之外的所有项目

我想找到一些目录并删除除最新的 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 行之外的所有内容

相关内容