当前位置: 首页 > 面试题库 >

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

邹宣
2023-03-14
问题内容

我正在编写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[*]},它将执行分词,可能会破坏您的文件名。

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

存档最近七天的日志

仅需更改一个字符:

#!/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意味着年龄大于7天,而-mtime -7意味着小于7天。请注意,find将忽略小数部分。因此+7将包括8天,但不包括7.5天。有关man find详细信息,请参见。



 类似资料:
  • 问题内容: 如果我在不带字符“ |”的脚本下运行 它正常工作,但是当我添加字符“ |”时 如何添加字符“ |”不起作用 使用sql脚本将文本文件? 谢谢 问题答案: 管道字符在批处理命令中具有特殊含义,因此必须使用脱字符将其转义。这应该工作: 尽管这实际上不是将数据写入文本文件的好方法:通常,SQL Server不应具有写入C:驱动器根目录的权限,并且默认情况下处于禁用状态。我建议你看看喜欢的替代

  • 我有一台Windows机器作为Jenkins奴隶。使用Groovy脚本我需要实现以下内容: 1) 在 Jenkins 从属服务器上创建一个文件夹 2) 将文件从本地机器复制到 Jenkins 从属 3)修改Jenkins上的PATH变量

  • 问题内容: 我正在做一个bash shell脚本,我想更改创建新文件的默认组。我知道您用来更改权限。团体有东西吗? 问题答案: 该命令用于在登录会话期间更改当前组ID。 在该会话中创建的新目录将具有该命令设置的组ID。 (1)

  • 我过去使用过Grails渲染插件,在创建PDF时取得了很大成功。现在我想创建一个简单的文本文件,使用gsp。我喜欢使用模型轻松定义如何将信息插入模板。我意识到我不需要渲染文本文件,但是有没有类似的方法可以使用模板来创建普通的文本文件? 如何使用Grails渲染插件渲染jpg的示例:(注意模型的使用) 如果没有像上面例子那样简单的方法,因为我的信息来自多个域类,我应该只创建<代码>

  • 问题内容: 我使用 hsqldb 运行需要数据库访问权限的单元测试。 目前,当我想为特定测试创建表时,我具有以下代码: 该方法检索在上下文中定义的DataSource : 现在,我想从一个SQL脚本创建表(当然,此脚本将包含多个表创建): 在HSQLDB文档中,我可以要求他在启动时运行脚本。但是,它不符合我的要求,因为我想在运行时运行脚本。 当然,我可以自己读取文件,并且对于每个SQL语句,我都运

  • 创建组件脚本 在 Cocos Creator 中,脚本也是资源的一部分。你可以在资源编辑器中通过点击"创建"按钮来添加并选择 JavaScript 或者 TypeScript 来创建一份组件脚本。此时你会在你的资源编辑器中得到一份新的脚本: 一份简单的组件脚本如下: cc.Class({ extends: cc.Component, properties: { },