centos 7のheadコマンドzフラグ

centos 7のheadコマンドzフラグ

@dessertの答えを読んでいます。https://askubuntu.com/a/990771/853133Ubuntuでcronを使用してディレクトリから古いバックアップフォルダを削除する方法について説明します。与えられたコマンドは次のとおりです。

find /BACKUPDIR/ -mindepth 1 -maxdepth 1 -type d -print0 | sort -z | head -zn-6 | xargs -0 echo rm -rf

しかし、CentOs 7はヘッドコールでzフラグを使用するのが好きではありません。

head: invalid option -- 'z'

CentOs7のソリューションはありますか?

私は見ました:「-z」オプションが使用できない場合、「head -z」に対応するコマンドをどのように実行しますか?私はこの説明が私の問題には適用されないと思います。 nより古いバックアップを削除したい場合は、コマンドを変更する方法がわかりません。

答え1

はい、過去数十年間、GNUユーティリティはNULで区切られたレコードのサポートを徐々に追加してきました。 GNUはhead -z比較的新しいもの(2015)ですが、GNUは数十年(1996)またはそれより長い期間(1990)sort存在してきました。-zxargs -0

ここでも次のことができます。

find /BACKUPDIR/ -mindepth 1 -maxdepth 1 -type d -print0 |
  sort -rz | sed -z 1,6d | xargs -r0 echo rm -rf

-zGNUの追加はsed最近(2012)ですが、head新しいものではありません。

何十年もの間、GNUテキストユーティリティは入力でNULバイトを処理できたので、いつでも次のことができます。

find /BACKUPDIR/ -mindepth 1 -maxdepth 1 -type d -print0 |
  tr '\0\n' '\n\0' |
  sort -r | tail -n +7 | 
  tr '\0\n' '\n\0' |
  xargs -r0 echo rm -rf

または、いつでもインストールしzshて実行できます。

echo rm -rf /BACKUPDIR/*(D/[1,-7])

nglob修飾子は数字でソートされるため、10は1と2の間ではなく9の後にソートされます。)

(上記の日付は変更ログから取得されたものであり、これらの変更を含む公式バージョンは将来の可能性があります。)

関連情報