GNU/Linux >> Linux の 問題 >  >> Linux

ディレクトリ内のファイルの数を数え、その数が5を超えた場合に最も古いものを削除するにはどうすればよいですか?

CentOS7サーバーで自動バックアップを実行するスクリプトを作成しました。
バックアップは/home/backupディレクトリに保存されます。スクリプトは機能しますが、バックアップが実行された後にファイルをカウントする方法を組み込み、数が5を超える場合は、最も古いバックアップを削除します。

以下は、バックアップスクリプト用に用意したものです。

#!/bin/bash

#mysqldump variables

FILE=/home/backup/databasebk_!`date +"Y-%m-%d_%H:%M"`.sql
DATABASE=database
USER=root
PASS=my password

#backup command process

mysqldump --opt --user=${USER} --password=${PASS} ${DATABASE} > ${FILE}

#zipping the backup file

gzip $FILE

#send message to the user with the results

echo "${FILE}.gz was created:"
ls -l ${FILE}.gz

# This is where I would like to count the number of files 
# in the directory and if there are more than 5 I would like
# to delete the oldest file. Any help is greatly appreciated

ありがとう
-マイク

承認された回答:

set -- /home/backup/databasebk_*を見ることができます $# 5より大きい場合は、ファイルを削除してください。

したがって、コードは次のようになります

set -- /home/backup/databasebk_*
while [ $# -gt 5 ]
do
  echo "Removing old backup $1"
  rm "$1"
  shift
done

これが機能するのは、選択したファイル名が自動的に「最も古いものから順に」なるためです。

一貫性を保つために、変数を設定します(通常はBASEと呼びます ただし、好きなように呼び出すことができます)

だから

BASE=/home/backup/databasebk_
FILE=${BASE}!`date +"%Y-%m-%d_%H:%M"`.sql
....
set -- ${BASE}*
while [ $# -gt 5 ]
do
  echo "Removing old backup $1"
  rm "$1"
  shift
done

Linux
  1. 特定のディレクトリ内のファイルとサブディレクトリの数をカウントする方法

  2. Linuxのディレクトリツリーで最も古いファイルを見つける方法

  3. Linuxでディレクトリとフォルダを削除する方法は?

  1. ディレクトリ内のファイル数を数える最良の方法は何ですか?

  2. Ubuntu ディレクトリ内のすべてのファイルの行数を数える

  3. Cを使用してディレクトリ内のファイル数を数える

  1. ディレクトリとサブディレクトリ内のファイル数を見つける方法

  2. コマンドラインを使用してディレクトリ内のファイルの数を取得するにはどうすればよいですか?

  3. 各ディレクトリ内のファイル数を数える方法は?