web-dev-qa-db-ja.com

Unixのシェルスクリプトを使用して10日以上前のファイルを削除する

私はシェルスクリプトに慣れていませんが、誰でも手助けできますか?フォルダー内のスクリプトを現在の日付から10日まで削除したい。スクリプトは次のようになります。

2012.11.21.09_33_52.script
2012.11.21.09_33_56.script
2012.11.21.09_33_59.script

スクリプトはCrontabで10日ごとに実行されるため、現在の日付が必要です。

117
Steve88

findは、この種のタスクに共通のツールです。

find ./my_dir -mtime +10 -type f -delete

説明

  • ./my_dirあなたのディレクトリ(自分のものに置き換えてください)
  • 10日以上前の-mtime +10
  • -type fのみのファイル
  • -deleteは驚きません。 コマンド全体を実行する前にfindフィルタをテストするために削除してください

そして./my_dirが悪い驚きを避けるために存在するように気をつけてください!

387
Gilles Quenot

古いファイルを削除するためのシェルスクリプトの追加

#!/bin/bash

timestamp=$(date +%Y%m%d_%H%M%S)
path="/data/backuplog"
filename=log_back_$timestamp.txt
log=$path/$filename

find $path -name "*.txt"  -type f -mtime +7 -print -delete >> $log

echo "Backup:: Script Start -- $(date +%Y%m%d_%H%M)" >> $log

START_TIME=$(date +%s)

... code for backup ...or any other operation ....


END_TIME=$(date +%s)

ELAPSED_TIME=$(expr $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

コードはsputnickの答えに基づいており、さらにいくつかの点が追加されています。

  • タイムスタンプで名前が付けられたログファイル
  • ログフォルダ指定
  • ログフォルダでのみ* .txtファイルを検索します。
  • 7日を超えるログファイルは削除されます(これがバックアップログ用であると仮定して)
  • 開始/終了時刻を書き留めます
  • 経過時間を計算します...
14
MarcoZen

あなたがファイルデータを介して作業する余裕があるならば、あなたはすることができます

find -mmin +14400 -delete
6
glglgl