Linux

linux find 命令 + 刪除除最後 5 個按日期排序的所有快照文件

  • August 8, 2022

/zookeeper/version-2,我們有很多zookeeper快照文件

.
.
.

-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 作業 ( crontab ) 中設置 find 命令

預期輸出範例

-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

直接刪除zookeeper快照可能會對hadoop集群產生不可預知的結果。為此目的有特定的命令:

zkCleanup.sh -n 5

zsh

rm -f /zookeeper/version-2/snapshort.*(N.om[6,-1])

where om orders by modification time (newest first like ls -tdoes),.限制為正常文件,N啟用Nullglob,[6,-1]選擇倒數第 6 個。如果文件少於 6 個,rm -f則不帶參數呼叫,但不應抱怨。

引用自:https://unix.stackexchange.com/questions/712760