私はこのスクリプトを数ヶ月前に作成しましたが、私は毎日それを使って3日以上経過したバックアップファイルを探し出しています。 3日以上の作成があるすべてのファイルをすばやく特定するのに役立ちます。ディレクトリ内のすべてのファイルの数を表示するスクリプト
#!/bin/bash
#Backup
time=$(date +%d) #Current time in days
a=3 #Number of the past days
b=0 #No need to verify it because it has a backup from today
echo
ls -l | tail -n +2 | while read result;
do
echo $result | awk -vC0='\033[0;0m' -vC1='\033[0;32m' -vC2='\033[0;31m' -vC3='\033[0;33m' \
'{printf "%+10s %+1s %-5s %+4s %+4s %+3s %+2s %5s %-20s \n", $1,$2,$3,$4,$5,$6," " C1 $7 C0," " $8," " $9}'
actual=$(echo $result | awk '{ print $7 }')
partition=$(echo $result | awk '{ print $9 }')
rest=$(($time-$actual))
if [[ $rest -le $a && $rest -ne $b ]]; then
echo -e "\t The Backup for \e[33m$partition\e[0m was done \e[33m$rest\e[0m days ago"
fi
done
ls -lコマンドの結果と、人間が判読可能な方法でファイルの年数に関するコメントをCLIに表示します。例:私は、このスクリプトは毎日毎朝それはバックアップが劣らず、3日ごとに行われていないされている場合、私はすぐに識別するのに役立ちます、スクリプトファイルはである何歳示すすべてのファイルのコメントを表示する使用
-rw-r--r-- 1 root root 98756181 Mar 7 23:59 server005.Mon.tgz
The Backup for server005.Mon.tgz was done 3 days ago
-rw-r--r-- 1 root root 23663925 Mar 3 18:00 server006.Fri.tgz
The Backup for server006.Fri.tgz was done 3 days ago
-rw-r--r-- 1 root root 23663925 Mar 3 18:00 server009.Mon.tgz
The Backup for server009.Mon.tgz was done 3 days ago
ファイルの現在の日付(日数)からファイルの作成日(日数)を引いたものを使用した場合、結果が3より大きい場合、ファイルの日数でコメントが表示されますが、それはスクリプトに負の値が表示されるため、実際の日付が29日、30日または1日目の近くにあるときに問題が発生します。たとえば、
The Backup for backupserver001.Thu.tgz was done -11 days ago
The Backup for backupserver002.Wed.tgz was done -10 days ago
The Backup for backupserver003.Mon.tgz was done -21 days ago
私が言ったように、これは現在の日付が月末または月の初めに近い場合にのみ発生します。
私はプログラミングや数学にはあまりよくないので、ここで助けを求めているのです。私はこの作業がはるかに良い方法で簡単にできることを確信しています、私のコードは本当に面倒です。どんな助けでも本当に感謝しています。
'time'と' actual'は月の両方の日です。前の月に '実際の'が発生したときには 'rest'に負の値が得られます。 – chepner