Skip to content

Instantly share code, notes, and snippets.

@fuji44
Last active May 11, 2021 04:38
Show Gist options
  • Save fuji44/f112cf09c5b1f7bc1bd76dcdb8a6ec91 to your computer and use it in GitHub Desktop.
Save fuji44/f112cf09c5b1f7bc1bd76dcdb8a6ec91 to your computer and use it in GitHub Desktop.
バックアップファイルを最新のn件を残して削除する
#!/bin/sh
# /mnt/backupにあるbackup_で始まって.gzで終わるファイルのうち、最新の5つ以外を削除する
# [前提] backup_20210203.gz のようなファイル名に日時が入っており最新順に整列可能なこと。
: "${target_dir:=/mnt/backup}"
: "${prefix:=backup_}"
: "${suffix:=.gz}"
: "${keep_count:=5}"
find -s $target_dir/${prefix}*${suffix} 2>/dev/null | sort -r | tail -n +"$((keep_count + 1))" | xargs -I@ rm -f @
# 解説
# find -s $target_dir/${prefix}*${suffix} 2>/dev/null
# /mnt/backupの下にあるbackup_ではじまって.gzで終わるファイル一覧を出力する。'No such file or directory'などのエラー出力は捨てる。
# sort -r
# ファイル一覧をファイル名の降順でソート。つまり日付の新しい順。
# tail -n +"$((keep_count + 1))"
# 最新から6番目以降のファイルを出力する。つまり、最新のファイル5つを除いたファイルを表示する。
# xargs -I@ rm -f @
# 受け取った各行に対してrm -fを実行する。
# -Iは標準入力から受け取った文字列を置き換える文字を指定している。
# つまり、`rm -f backup_20210203.gz` というコマンドが標準入力から受け取った行数だけ実行される。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment