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
を参照 詳細はこちら