gpt4 book ai didi

linux - 如何使用 linux shell 脚本为超过 7 天的文件创建 tar

转载 作者:IT王子 更新时间:2023-10-29 00:17:16 26 4
gpt4 key购买 nike

我正在编写 shell 脚本来备份超过 7 天的文件。这是我的代码。但我没有得到预期的结果。谁能纠正我?

#!/bin/bash
# Backup files

files=($(find /var/log/ -mtime +"7"))
for files in ${files[*]}
do
echo $files
tar cvfz backup.tar.gz $files
done

最佳答案

这会起作用:

#!/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 提供每个文件名一个参数,即使文件名包含空格、制表符或换行符也能正常工作。相比之下,在 shell 展开 ${files[*]} 之后,它将执行分词,可能会破坏您的文件名。

有关用于创建 files 数组的循环的详细说明,请参阅:How can I store find command result as arrays in Bash

find/var/log/-mtime +7 命令生成的所有文件和目录都将包含在 tar 文件中。要仅包含文件而不包含目录,请参阅 Skynet 的回答。

归档最近七天的日志

只有一个字符需要改变:

#!/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 解释数字参数如下:

Numeric arguments can be specified as
+n for greater than n,
-n for less than n,
n for exactly n.

因此,-mtime +7 表示大于 7 天,而 -mtime -7 表示小于 7。注意 find 将忽略小数部分。因此 +7 将包括 8 天但不包括 7.5 天。有关详细信息,请参见 man find

关于linux - 如何使用 linux shell 脚本为超过 7 天的文件创建 tar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28185012/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com