以下には、/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
基準にソートすると(最新項目から)m
ls -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
エコーを削除すると、実際にはエコーが削除されます。
はい:私も見苦しいと思います。