私はシェルスクリプトを初めて使用しますが、誰か助けてもらえますか?フォルダ内のスクリプトを現在の日付から10日まで削除したい。スクリプトは次のようになります。
2012.11.21.09_33_52.script
2012.11.21.09_33_56.script
2012.11.21.09_33_59.script
スクリプトはCrontabで10日ごとに実行されるため、現在の日付が必要です。
find
この種のタスクの一般的なツールです:
find ./my_dir -mtime +10 -type f -delete
説明
./my_dir
あなたのディレクトリ(あなた自身のものに置き換えてください)-mtime +10
10日以上-type f
ファイルのみ-delete
当然のことです。コマンド全体を実行する前に、フィルターをテストするために削除してくださいfind
そして、./my_dir
悪い驚きを避けるために存在することに注意してください!
上記のシェルスクリプトをスパイスアップして古いファイルを削除するだけですが、ログと経過時間の計算が必要です
#!/bin/bash
path="/data/backuplog/"
timestamp=$(date +%Y%m%d_%H%M%S)
filename=log_$timestamp.txt
log=$path$filename
days=7
START_TIME=$(date +%s)
find $path -maxdepth 1 -name "*.txt" -type f -mtime +$days -print -delete >> $log
echo "Backup:: Script Start -- $(date +%Y%m%d_%H%M)" >> $log
... code for backup ...or any other operation .... >> $log
END_TIME=$(date +%s)
ELAPSED_TIME=$(( $END_TIME - $START_TIME ))
echo "Backup :: Script End -- $(date +%Y%m%d_%H%M)" >> $log
echo "Elapsed Time :: $(date -d 00:00:$ELAPSED_TIME +%Hh:%Mm:%Ss) " >> $log
コードはいくつかのことを追加します。
注:コードをテストするには、-print-deleteの代わりに-printを使用します。ただし、パスを注意深く確認してください。
注:サーバーの時刻がdateを介して正しく設定されていることを確認してください-timezone/ntpを正しく設定してください。さらに、「statfilename」でファイル時間を確認します
注:mtimeは、日数のコンテキストでファイルのタイムスタンプを取得する場合、すべての小数部(2日(+2日)より古い場合は実際には3日を意味します)を破棄するため、mtimeをmminに置き換えることができます。
-mtime +$days ---> -mmin +$((60*24*$days))
ファイルデータを介して作業する余裕がある場合は、次のことができます。
find -mmin +14400 -delete