Bash

bashで最新N件残して他を削除する話

実行時になにがしかを出力したりする際に、
capistrano みたいな 最新N件残して残りを削除 をbashで。

a.sh
EXPORT_PATH=./data/some_exports
TARGET_DATE=$(date +%Y%m%d_%H%M%S)

if [ -d ${EXPORT_PATH} ]; then
    # 最新から4件残し
    ls -td ${EXPORT_PATH}/* | tail -n +5 | xargs rm -rf
fi

mkdir -p ${EXPORT_PATH}/${TARGET_DATE}

cat <<-EOD > ${EXPORT_PATH}/${TARGET_DATE}/export.txt
this is sample ${TARGET_DATE}
EOD

実行と確認。

for x in {1..10}; do
  sleep 1
  bash a.sh

  tree ./data
  find ./data/ -name 'export.txt' -exec cat {} \;
done