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

最後の x 個のファイルを保持し、残りを削除する bash スクリプトの何が問題になっていますか?

これを試すことができます:

ls -r1 $PT_MYSQLBACKUPPATH/ | tail -n +$(($PT_FILESTOKEEP+1)) | xargs rm

ls -r1 すべてのファイルを逆の順序で、1 行に 1 ファイルずつ一覧表示します。

tail -n +$number リストの最初の $number-1 ファイルを除外します (つまり、$number から最後のファイルまでのすべてのファイルを表示します)。

xargs rm を実行します 標準入力からのすべてのファイル名で。


まず、正しいフォルダにいることを確認してください:

if [ -z $PT_MYSQLBACKUPPATH ]; then
 echo "No PT_MYSQLBACKUPPATH set. Exit"
 exit 1
fi
cd $PT_MYSQLBACKUPPATH
if [ $? != 0 ]; then
 echo "cd to PT_MYSQLBACKUPPATH failed. Exit"
 exit 1
fi

あなたの場合、n より古いファイルを削除できます:

find -mtime +14 -delete

14 日以上経過したファイルを削除します。

あなたの質問に対するより複雑な (もちろん最適ではありませんが) 解決策:

# Get list of newest files. If newest files are first, use head -n 14 instead of 
# head.
files=(`ls | sort | tail -n 14`)
# Loop over all files in this folder
for i in *; do 
 preserve=0; 
 #Check whether this file is in files array:
 for a in ${files[@]}; do 
  if [ $i == $a ]; then 
   preserve=1; 
  fi; 
 done; 
 # If it wasn't, delete it (or in this case, print filename)
 if [ $preserve == 0 ]; then 
  echo $i; # test first, then change this to "rm $i"
 fi;
done

この投稿からのインスピレーションの使用法は次のとおりです。

#!/bin/bash
# Thu Jun 28 13:22:53 CEST 2012
# ${DESTDIR}/files2keep.sh
# Keep the 3 yungest files
# mra at miracleas.dk , deployed on RHEL 6.
InitValues(){
TODAY=`date +"%Y%m%d"`
NOW=`date +"%H%M"`
DESTDIR=/mnt/dbdmp
LOGFILE=?{0}-${TODAY}-${NOW}.log
}
BackupFileMaintenance(){
KEEPFILES=(`ls -lrt ${DESTDIR}/*mysqldump.sql.gz| tail -n 3| awk '{print $9}'`)
    for i in `ls -lrt ${DESTDIR}/*mysqldump.sql.gz | awk '{print $9}'`; do
    preserve=0 
    #Check whether this file is in files array:
        for a in ${KEEPFILES[@]}; do
                if [ $i == $a ]; then
                preserve=1 
                fi 
        done 
    if [ $preserve == 0 ]; then
    echo $i; # then change this to "rm -f $i" after test
    fi
    done
}
InitValues
BackupFileMaintenance
exit

Linux
  1. Linuxでのutmp、wtmp、およびbtmpファイルの目的は何ですか

  2. アルファベット順に並べ替えたときに N 個のファイルを除くすべてを削除する Bash スクリプト

  3. linux/if.h と net/if.h の何が問題になっていますか?

  1. #!/usr/bin/env bash と #!/usr/bin/bash の違いは何ですか?

  2. bashスクリプトで最新の3つを除くすべてのファイルを削除します

  3. Bashスクリプトの実行とソースの違いは何ですか?

  1. ファイルを移動して進行状況を表示する方法(例:プログレスバーを使用)?

  2. 最後の(最新の)20を除くフォルダ内のすべてのファイルを削除しますか?

  3. 最後のログファイル(アルファベット順)を除く古いログファイルを削除しますか?