上位n件以外のファイルを削除

バックアップするときに最新バージョン以外のファイルを削除したい.

findコマンド

1つの方法は find コマンドのmtimeオプションとexecオプションを併用することである.

lsの結果をsedで切り出す

もう1つの方法はlsで取得したファイルリストを sed を使いn行目以降のみ取得し,それらをxargsで削除することである.

次のようなファイル一覧がある.

$ ls 
jpwebsite-backup-20230401220005.tar.gz
jpwebsite-backup-20230401220004.tar.gz
jpwebsite-backup-20230401220003.tar.gz
jpwebsite-backup-20230401220002.tar.gz
jpwebsite-backup-20230401220001.tar.gz

この中から上位3件を残して,それ以外のファイルを削除するワンライナーが以下である.例えば上記では20230401220005と20230401220004, 20230401220003を残し,それ以外の20230401220002と20230401220001を削除する.中でもポイントは sedコマンドでの4行目以降のリストアップである.これにより上位3件のファイルが除外される.

ls -r jpwebsite-backup* | sed -n '4,$p' | xargs rm ;

lsには -t-s-r をはじめとする並べ替えのオプションが整備されているため,それらを駆使するとうまくファイルの削除が行える.

参考資料