linux findコマンド+日付でソートされた最後の5つを除くすべてのスナップショットファイルを削除する

linux findコマンド+日付でソートされた最後の5つを除くすべてのスナップショットファイルを削除する

以下には、/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構文を作成しました。スナップ写真findファイルは最後の5つを除いて日付別にソートされていますが、それをコマンドと統合する方法がわかりません。

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

答え1

ZooKeeperスナップショットを直接削除すると、Hadoopクラスターに予測不能な結果が生じる可能性があります。この目的のための特定のコマンドがあります:

zkCleanup.sh -n 5

答え2

存在するzsh

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

修正時間をom o基準にソートすると(最新項目から)mls -t.定期的なファイルを開き、ulglobをN有効にして、下部から6番目を選択します。ファイルが6個未満の場合は引数なしで呼び出されますが、文句を言うべきではありません。N[6,-1]rm -f

答え3

編集:良いです。この(正しい)コメントはジェゲンすぎます。ありがとうございます。私はこれを掘り下げた。実は思ったより難しいですね。少なくとも「ファイルが見つかりません」の状況が修正されました。何も見つからない場合、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 

エコーを削除すると、実際にはエコーが削除されます。

はい:私も見苦しいと思います。

関連情報