2017-03-06 6 views
0

私はこのスクリプトを数ヶ月前に作成しましたが、私は毎日それを使って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 

私が言ったように、これは現在の日付が月末または月の初めに近い場合にのみ発生します。

私はプログラミングや数学にはあまりよくないので、ここで助けを求めているのです。私はこの作業がはるかに良い方法で簡単にできることを確信しています、私のコードは本当に面倒です。どんな助けでも本当に感謝しています。

+0

'time'と' actual'は月の両方の日です。前の月に '実際の'が発生したときには 'rest'に負の値が得られます。 – chepner

答えて

0

あなたは絶対的なアイテムの違いを実行するために、月の日を使用していますが、あなたが見ることができるようこの月の現在の日が前の月の後に日未満であるとき、それは失敗します。代わりに、ファイルが最後に変更されてからの経過時間を計算するために、1970年の1日からの秒数を測定するUNIXタイムスタンプを使用する必要があります。また、この情報を得るには、lsではなくstatを使用することをお勧めします。 (GNU statを想定し、。あなたの地元の実装が異なる場合があります)@chepnerが私を助け

#!/bin/bash 
#Backup 
now=$(date +%s)  #Current time in seconds since Jan 1 1970 
a=3      #Number of the past days 
b=0      #No need to verify it because it has a backup from today 
echo 
for f in *; do  
    actual=$(stat -c '%Y') 
    rest=$(((now - actual)/84600)) 
    if ((rest < a && rest != b)); then 
    printf '\t The Backup for \033[33m%s\033[0m was done \033[m%d\033[0m days ago\n' "$f" "$rest" 
done 
+0

私はかなり前にstatと一緒に試みましたが、それはどこにもありませんでした。私は理解していないというエラーを受けています。 stat:「%Y」のファイルシステム情報を読み取ることができません:そのようなファイルやディレクトリはありません。/home/admin/Documents/*のようにいくつか修正しました。完了の前にfiを追加しました。 –

+0

変数 "now"には何が格納されますか? –

+0

申し訳ありませんが、私は 'stat'sを混乱させました。 BSDの 'stat'の例を投稿しました。私はまた、 'time'を' now'に置き換えることを意味しましたが、完全にはそうしませんでした。両方の問題を修正する必要があります。 – chepner

0

した後、私は今、それがはるかに優れた方法でタスクを実行すると、スクリプトを強化することができました。出力は、より整理し、明確に、より簡単にすべての問題を特定することである

#!/bin/bash 

#Backup 

time=$(date +%s)  #Current time in seconds since Jan 1 1970 
a=3      #Number of the past days 

echo 
    printf '\t \t \033[32mBACKUPS \tBACKUPS \tBACKUPS \tBACKUPS \tBACKUPS \tBACKUPS \tBACKUPS \tBACKUPS \033[0m \n \n' 
for f in /home/admin/Documents/*; 
do 
    actual=$(stat -c '%Y' $f) 
    normal=$(stat -c '%y' $f) 
    rest=$(((time - actual)/84600)) 
    if ((rest > a)); then 
    printf '\t Backup for \033[33m%-40s\033[0m was done \033[1;31m%d\033[0m days ago. \t Created Date: \033[0m%-30s \n' "$f" "$rest" "$normal" 
else 
    printf '\t Backup for \033[33m%-40s\033[0m was done \033[1;32m%d\033[0m days ago. \t Created Date: \033[0m%-30s \n' "$f" "$rest" "$normal" 
fi 
done 
echo 

    BACKUPS  BACKUPS   BACKUPS   BACKUPS   BACKUPS   BACKUPS   BACKUPS   BACKUPS 

     Backup for /home/admin/Documents/backup_full.sh  was done 36 days ago.  Created Date: 2017-01-30 15:26:46.217390547 -0500 
     Backup for /home/admin/Documents/backup.sh   was done 0 days ago.  Created Date: 2017-03-07 15:07:17.066182193 -0500 
     Backup for /home/admin/Documents/English.xlsx  was done 36 days ago.  Created Date: 2017-01-30 15:25:37.592965894 -0500 
     Backup for /home/admin/Documents/MySQL.docx   was done 36 days ago.  Created Date: 2017-01-30 15:25:37.604965969 -0500 
     Backup for /home/admin/Documents/accounts.txt  was done 36 days ago.  Created Date: 2017-01-30 15:25:37.628966117 -0500 
     Backup for /home/admin/Documents/SGID.docx   was done 36 days ago.  Created Date: 2017-01-30 15:25:37.604965969 -0500 
     Backup for /home/admin/Documents/sticky_bit.docx was done 36 days ago.  Created Date: 2017-01-30 15:25:37.616966043 -0500 
     Backup for /home/admin/Documents/SUID.docx   was done 36 days ago.  Created Date: 2017-01-30 15:25:37.576965795 -0500 
     Backup for /home/admin/Documents/test.sh   was done 1 days ago.  Created Date: 2017-03-06 12:23:46.872273977 -0500 
関連する問題