GNU/Linux >> Belajar Linux >  >> Linux

Apa yang salah dengan skrip bash saya untuk menyimpan file x terakhir dan menghapus sisanya?

Anda dapat mencoba yang ini:

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

ls -r1 akan mencantumkan semua file dalam urutan terbalik, satu file per baris.

tail -n +$number memfilter file $angka-1 pertama dari daftar (resp. menampilkan semua file mulai dari $angka hingga yang terakhir).

xargs akan mengeksekusi rm dengan semua nama file dari input standar.


Pertama, pastikan Anda berada di folder yang benar:

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

Anda dapat menghapus file yang lebih lama dari n, dalam kasus Anda:

find -mtime +14 -delete

Menghapus file yang lebih lama dari 14 hari.

Solusi yang lebih rumit (tentu saja tidak optimal) untuk pertanyaan Anda:

# 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

Inilah penggunaan inspirasi saya dari pos ini:

#!/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. Apa tujuan dari file utmp, wtmp dan btmp di Linux?

  2. Skrip Bash untuk menghapus semua file kecuali N saat diurutkan menurut abjad

  3. Apa yang salah dengan linux/if.h dan net/if.h?

  1. Apa perbedaan antara #!/usr/bin/env bash dan #!/usr/bin/bash?

  2. Apa perbedaan antara lsof dan netstat di linux?

  3. Menggunakan find dan tar dengan file dengan karakter khusus pada namanya

  1. Menavigasi shell Bash dengan pushd dan popd

  2. Apa perbedaan antara menjalankan skrip Bash vs sumbernya?

  3. Skrip Bash untuk menghapus file yang lebih lama dari x hari dengan subdirektori