在/zookeeper/version-2下,我们有许多动物园管理员快照文件。
.
.
.
-rw-r--r-- 1 zookeeper hadoop 495333240 Aug 3 14:51 snapshot.5d00011991
-rw-r--r-- 1 zookeeper hadoop 495333240 Aug 3 14:53 snapshot.5d00011992
-rw-r--r-- 1 zookeeper hadoop 495333240 Aug 3 14:56 snapshot.5d00011993
-rw-r--r-- 1 zookeeper hadoop 495333235 Aug 4 06:18 snapshot.5d0001e0b4
-rw-r--r-- 1 zookeeper hadoop 495326760 Aug 5 11:54 snapshot.5d0003660f
-rw-r--r-- 1 zookeeper hadoop 495335787 Aug 6 08:39 snapshot.5d00047faf
-rw-r--r-- 1 zookeeper hadoop 495335268 Aug 7 01:26 snapshot.5d000563eb我需要按日期对快照文件进行排序,并删除除最近5个快照文件之外的所有快照文件。所有不是快照的其他文件都应该保留下来。
我创建了以下cli语法,以便删除除最后5个按日期排序的快照文件之外的所有快照文件,但不知道如何将其与find命令集成
ls -ltr zookeeper/version-2 | grep snapshot | head -n -5 | xargs rm -f注意,最后的目标是在cron作业中设置find命令( crontab )
预期产出实例
-rw-r--r-- 1 zookeeper hadoop 495333240 Aug 3 14:56 snapshot.5d00011993
-rw-r--r-- 1 zookeeper hadoop 495333235 Aug 4 06:18 snapshot.5d0001e0b4
-rw-r--r-- 1 zookeeper hadoop 495326760 Aug 5 11:54 snapshot.5d0003660f
-rw-r--r-- 1 zookeeper hadoop 495335787 Aug 6 08:39 snapshot.5d00047faf
-rw-r--r-- 1 zookeeper hadoop 495335268 Aug 7 01:26 snapshot.5d000563eb发布于 2022-08-07 16:12:27
直接删除动物园管理员快照可能会对hadoop集群产生不可预测的结果。为此目的有具体的命令:
zkCleanup.sh -n 5发布于 2022-08-07 16:28:34
在zsh中:
rm -f /zookeeper/version-2/snapshort.*(N.om[6,-1])在om o按m着色时间排序(最新的第一个像ls -t一样)的地方,.限制为常规文件,N启用N空值,[6,-1]选择第6到最后一个。如果只有不到6个文件,则不带任何参数地调用rm -f,但不应该抱怨它。
发布于 2022-08-07 16:00:18
编辑:好的,那些(正确的)评论对我来说太多了。谢谢。我钻研了这个。其实比我想象的要难。至少解决了“无档案发现”的案子。如果没有发现,grep将生成一个非零返回码。干杯。
find /zookeeper/version-2 -type f -name 'snapshot.*' | grep . | \
xargs -I% -n1 bash -c 'ls -tr "$@" || exit 255' _ % | head -n -5 | \
xargs echo rm -v 删除回波以真正删除它们。
是的:我觉得它也很丑。
https://unix.stackexchange.com/questions/712760
复制相似问题