linux - 需要 TAR shell 脚本帮助

标签 linux bash shell tar

我是 shell 脚本新手。我为 2 个不同的输入文件编写了以下脚本:

#!/bin/sh
last=`ls [JKT-ABC]*.tar | sed s/.tar//g | sort -g | tail -1`
if(($last%1==0))
then
     tar -cf `date '+%W%b%d'`.tar [JKT-ABC]*.tar
fi

last=`ls [JKT-DEF]*.tar | sed s/.tar//g | sort -g | tail -1`
if(($last%1==0))
then
     tar -cf `date '+%W%b%d'`.tar [JKT-DEF]*.tar
fi

执行此脚本后,输出是一个名为:xxSep28.tar 文件。因此,2 个输入 .tar 文件已成为 1 个 TAR (xxSep28)。这不是我想要的。

我的问题是:

  • 如何在脚本中输出/使用 tar 文件的全名? (例如:xx.Sep28.JKT-ABC)
  • 为什么这个脚本将两个输出文件合并为一个?如何将它们分开?

最佳答案

你的问题很难理解...你的脚本创建了一个名为的 tar 文件

<week><month><day>.tar         # 38Sep28.tar today for example

然后立即用另一个具有相同名称和不同内容的 tar 文件覆盖它。

显而易见的事情是让两个 tar 命令分别写入不同的文件。因此,我建议您将第一个 tar 命令更改为:

tar -cf "$(date '+%W%b%d')JKT-ABC.tar" something

第二个

tar -cf "$(date '+%W%b%d')JKT-DEF.tar" something

还有一个问题我还是不明白,这就是你的意思

[JKT-ABC]*.tar

它表示名称仅由字母 J、K、T 到 A (!)、B 或 C 后跟 .tar 组成的文件,因此它将匹配名为:

的文件
JJ.tar
CBACBACBCCCCCCCC.tar

我不认为这就是你的意思,特别是因为 T 到 A 的范围不太可能......

关于linux - 需要 TAR shell 脚本帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26085448/

相关文章:

java - 如何从 Bash shell 脚本优雅地关闭 Java 服务?

linux - 单声道返回代码 249 是什么意思?

bash - 明确判断当前运行的 shell 是 bash 还是 zsh

python - 如何找出Python脚本是从哪里调用的?

linux - 第一列中相同值的第二列和第三列之和

linux - CMake QNX 交叉编译 find_path 和 find_library 适用于 Linux 但不适用于 Windows

linux - 禁用仅通过 telnet 重新启动

shell - 为什么 uniq -c 输出带有空格而不是\t?

c - 如何实现shell输出作为C语言的输入?

linux - 在 ubuntu/linux 上使用 NSJSONSerialization 和 swift