【问题标题】:would like to tar files ending with same timestamp in to a single tar想将以相同时间戳结尾的文件 tar 到单个 tar
【发布时间】:2020-08-13 08:42:05
【问题描述】:

我得到了一个日志文件列表,所有这些文件都以时间戳结尾。 对于每一天,我都有一堆日志文件都以相同的时间戳结尾 一周以来,我有一长串带有时间戳的文件。

挑战是,我想使用 tar 命令来归档以相同时间戳结尾的文件集作为一个 tar 文件。

因此每天都会相应地得到 tar 文件。

请问我该如何实现?某种字符串匹配通配符,我是 linux 新手,请帮忙。

文件示例: enter image description here

【问题讨论】:

  • 请举例说明文件名的样子。
  • 嗨 Jona,附上示例截图的链接
  • 说 2020 年 8 月 10 日,我将有大约 40 多个文件,格式为:FILENAME_20200810_SERIAL.NO.log,大写字符串是变量,时间戳每天都在变化,所以只使用时间戳,我想将当天的所有文件 tar 到一个 tar 文件中。因此,每个月的每一天都会得到 tar 文件。请注意,每天的所有日志文件都生成到单个文件夹中,因此不仅需要 tar,还需要对 tar 文件进行分类作为每日备份,有时我们必须重新访问旧日志,这样可以轻松确定哪个day tar 我们可以解压以进行日志分析。
  • ls *.20200812_*.log 列出你想要的所有文件吗?
  • 仅供参考,当您可以将文本复制到问题中时,请勿发布图片。

标签: linux bash shell


【解决方案1】:

首先,获取唯一时间戳的列表。然后,对于每个时间戳存档具有该时间戳的所有文件:

printf %s\\n *.log | grep -Eo '\.[0-9]{8}_' | tr -d ._ | sort -u | while read timestamp; do
   tar cf "$timestamp.tar" ./*"$timestamp"*.log
done

这里我假设时间戳总是有 8 位数字,总是以 . 开头并总是以 _ 结尾(如您的屏幕截图所示)。

【讨论】:

    【解决方案2】:
    # get all dates
    all_date=`find -type f | awk -F '_'  '{print $2}'`
    
    # make a dir to save tar files
    mkdir tarfiles
    
    # archive
    for d in $all_date ; do
        tar zcvf tarfiles/$d.tar.gz *$d*
    done
    

    【讨论】:

    • 好吧,日期每天都在变化,所以我想避免在脚本中使用日期。只需使用匹配的通配符将日志组合成一个 tar。使用静态日期意味着我必须插入未来 10 年的每日日期!或者可能更多..
    • 我强烈推荐tar ... *111* 而不是tar ... `ls *111*` 。后者不仅速度较慢,而且还会用空格和符号(如*)破坏文件名。
    • SO 不赞成仅代码的答案。高质量的答案解释了代码的基本部分,为未来的访问者提供了长期价值,他们可以从您的代码中学习,将其应用到他们自己的问题上,从而更有可能获得支持。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-11
    • 1970-01-01
    • 2016-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-04
    相关资源
    最近更新 更多