0

さて、私がやろうとしているのは、すべてのバックアップ フォルダーの名前が 03-07-13 ということです。だから私は日を選択しようとしています.7日以上経過していれば削除されます. これは私がこれまでに持っているものですが、機能していません。

DATE=$(date +"%d")

for i in /media/backupdrive/*; do
    DAY=${i:22:2}
    if [ "$DAY" -ge "7" ]
    then
        echo "day greater than 7";
    fi
done

22:2 は /media/backupdrive/00- を遮断します

00 は月を表します

現在、7より大きいかどうかを確認しているだけで、7より大きい場合は出力されます。

編集:問題は解決しました。bash初心者を助けてくれてありがとう。ありがとうございました!

4

3 に答える 3

1

7日以上経過したファイルを削除したいようです。コマンドはそれらのfindファイルを見つけて、オプションでそれらを削除することができます:

find /media/backupdrive -mtime +7         # Files that are older than 7 days
find /media/backupdrive -mtime +7 -delete # ... and delete them
于 2013-03-07T19:49:08.633 に答える
1

コメントに記載されているスクリーンショットによると、実際のコードでは次のものが使用されます。

DAY=${i:22:2}
if [ "$day" -ge "7" ]

と の大文字と小文字の違いを強調しDAYます$day-geこれが実行されると、空の文字列を文字列 (または を介し​​て「数字」 ) と比較しようとします。これにより、受け取ったエラーが発生します。

if大文字バージョンを使用するようにステートメントを更新してみてください。

if [ "$DAY" -ge "7" ]
于 2013-03-07T19:45:55.340 に答える
0

「DAY」変数を使用すると、「ちょうどロールオーバー」の問題が発生します。

いくつかの代替案:

  • よりわかりやすいようにフォルダ形式を変更します。
  • 解析と操作が容易な時間値を与えるメタ ファイルを各フォルダーに追加します。
  • 上記のデータを含むバックアップフォルダーのインデックスを持っています。

私が通常使用する時刻形式には、次のものが組み込まれています。

   [epoch seconds]-[YYYY][MM][DD]-[HH]:[MM]:[SS]

これにより、現在から 7 日前のバックアップを要求するなどのことができます。エポック秒に対して計算を行うことで、日数が繰り越される混乱を避けることができます。

基本的に、エポック秒は時間の計算を簡単にするためのものです。他のタイムスタンプ ビットにより、人間が判読できるようになります。順序付けにより、フォルダー リストで正しく並べ替えられます。

編集:

バックアップ パスが変更された場合:

  DAYtmp=${i: -8:5}
  DAY=${DAYtmp: -2}

これにより、親パスの長さが変わると、フォルダー名から DAY が生成されます。

于 2013-03-07T19:40:59.813 に答える