用linux创建shell脚本文件,如何使用Linux Shell脚本为7天以上的文件创建tar

我正在编写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 <

tar cvfz backup.tar.gz"${files[@]}"

请注意,使用"${files[@]}"而不是${files[*]}。 "${files[@]}"将展开以为tar每个文件名提供一个参数,并且即使文件名包含空格,制表符或换行符也将起作用。相比之下,shell扩展${files[*]}后,它将执行单词拆分,可能会破坏您的文件名。

有关用于创建files数组的循环的详细说明,请参见:如何在Bash中将find命令结果存储为数组

由命令find /var/log/ -mtime +7生成的所有文件和目录都将包含在tar文件中。要仅包括文件,不包括目录,请参见天网的答案。

存档最近七天的日志

仅需更改一个字符:

#!/bin/bash

files=()

while IFS=  read -r -d $'\0'; do

files+=("$REPLY")

done <

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。

谢谢约翰。 它的工作。 太棒了:)

刚才注意到它不断循环。 迭代不会停止。 我在这里做错什么了吗?

@Palanikumar我的版本没有循环也没有迭代,只有两个命令。 一个定义文件列表,另一个定义文件的tar。 所以,请告诉我您所看到的。 如果不确定发生了什么,请将set -x放在脚本的开头。

如果仍然收到错误,请尝试修改IFS:#保存并更改IFS OLDIFS = $ IFS IFS = $ n#将所有文件名读入数组fileArray =($(find $ DIR -type f))#恢复它 IFS = $ OLDIFS在cyberciti.biz/tips/handling-filenames-with-spaces-in-bash.html中找到了解决方案

以此替换您的find命令,然后重试,

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

-7但答案为+1 :)

最后7天进入zip文件:```找到/ yourpath /-类型f -mtime -7 -print | zip dump.zip-@```

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值