检查 tar 文件是否存在 | bash脚本

检查 tar 文件是否存在 | bash脚本

我正在尝试测试我要创建的 tar 文件是否已经存在。如果没有,那么我想创建 tar 文件(这部分代码有效)。但是,测试 tar 文件的文件名是否存在的 if 语句不起作用(实际上并不测试 tar 文件是否存在,只是直接跳到 else 语句,即使 tar 文件已经存在)。有任何想法吗?

注意:fire_dir_name 是我们尝试压缩的文件的名称(即)myfile1.txt

#create variable for new name of file/dir
date=$(date +"%Y%m%d")
new_name="$file_dir_name.$date"
file_name="$new_name.tar"
echo $file_name

#check if tar file exists already
if [ -f "$file_name" ]
then
        echo "$file_name" exists
else

        # create tar file 
        tar -cvf $dir_path/$new_name.tar $file_dir_name -C $dir_path

答案1

这里的关键是您必须测试您正在创建的相同文件名

#check if tar file exists already
if [ -f "$file_name" ]
then
        ...
else
        # create tar file 
        tar -cvf "$file_name" ...
        ...
fi

此外,没有理由file_name不能成为完整路径。

file_name="$dir_path/$new_name.tar"

将目录放入变量名中可能不太容易出错。调用变量tar_nametar_path类似的东西可能是更好的风格。

答案2

如果我们忽略您错过该子句的部分fi,则问题的本质就围绕在您调用 之前tar

假设你想要

  • 创建一个名为$newname

  • 对于目录条目$file_dir_name

  • 里面$dir_path

你应该cd首先$dir_path.我不确定该-C标志是否可移植,但较新的pax命令没有它,原因很明显是为了降低复杂性。

使用-C标志还有另一个问题:如果 $dir_path 是相对的,它会在错误的位置创建 tarball。

我猜你的文件存在检查失败的原因是你没有更改到$file_name应该存在的目录。

接下来,将输出目标指定为 tarball 的文件名,并将$file_dir_nameas 操作数指定为tar/pax命令。

改进的命令:

...

#check if tar file exists already
cd "$dir_path"

if [ -f "$file_name" ]
then echo "$file_name" exists
else
  pax -w -f "$file_name" "$file_dir_name"
  ## alternatively, with tar:
  # tar cf "$file_name" "$file_dir_name"
fi

在这一点上,我想指出变量名称$file_name有点太通用了,它可以更改为类似$tarball.

作为奖励,您可以考虑缩短变量名称:

  1. $wd是您期望的工作目录的好名称,它既不与cd也不冲突pwd

  2. 我经常仅用于$f文件或任何“目录条目”;同样,$d对于目录操作数。

相关内容