GNU/Linux >> Linux の 問題 >  >> Linux

Linux シェル スクリプトを使用して 7 日以上経過したファイルの tar を作成する方法

find を置き換えます これでコマンドを実行して、もう一度やり直してください。

find /var/log -type f -mtime +7 

これは機能します:

#!/bin/bash
files=()
while IFS=  read -r -d $'\0'; do
    files+=("$REPLY")
done < <(find /var/log/ -mtime +7 -print0)
tar cvfz backup.tar.gz "${files[@]}"

"${files[@]}" の使用に注意してください ${files[*]} とは対照的に . "${files[@]}" tar を提供するように拡張されます ファイル名ごとに 1 つの引数があり、ファイル名にスペース、タブ、または改行が含まれていても機能します。対照的に、シェルが ${files[*]} を展開した後 、単語分割を実行し、ファイル名を壊す可能性があります.

files を作成するために使用されるループの詳細な説明については、 配列、参照:find コマンドの結果を配列として Bash に保存する方法

コマンド find /var/log/ -mtime +7 によって生成されるすべてのファイルとディレクトリ tar に含まれます ファイル。ディレクトリではなくファイルのみを含めるには、Skynet の回答を参照してください。

直近 7 日間のログをアーカイブするには

変更が必要な文字は 1 つだけです:

#!/bin/bash
files=()
while IFS=  read -r -d $'\0'; do
    files+=("$REPLY")
done < <(find /var/log/ -mtime -7 -print0)
tar cvfz backup.tar.gz "${files[@]}"

find のため、これは機能します 数値引数を次のように解釈します:

<ブロック引用>

数値引数は次のように指定できます。
nより大きい場合は+n、
-n 未満の場合は n、
n はちょうど n です。

したがって、-mtime +7 -mtime -7 の間に 7 日以上経過したことを意味します find に注意してください。 小数部は無視されます。したがって、+7 8 日は含まれますが、7.5 日は含まれません。 man find を参照 詳細はこちら


Linux
  1. Find -mtime +1が2日より古いファイルのみを返すのはなぜですか?

  2. Linuxで使用しているシェルを見つける方法

  3. Linux で tmpreaper を使用して N 日以上経過したファイルを削除する方法

  1. LinuxでXサイズよりも大きいまたは小さいファイルを見つける方法

  2. LinuxでX日より古いすべてのファイルを削除するにはどうすればよいですか?

  3. Linuxで特定の日付より古いファイルを削除するにはどうすればよいですか?

  1. 30日より古いファイルを自動的に削除するcronジョブを作成するにはどうすればよいですか?

  2. Linuxで過去30日間に変更されたファイルを見つける方法は?

  3. find コマンドを使用せずに n 日より古いファイルを削除する方法