上位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
をはじめとする並べ替えのオプションが整備されているため,それらを駆使するとうまくファイルの削除が行える.