防止 tar 覆盖 tarball

防止 tar 覆盖 tarball

我不小心运行了两次相同的命令:

tar --remove-files -cf ../2019-09.tar *2019-09-*

第二次调用将包含我的数据的 tarball 替换为一个空的,即使它因错误消息而终止:

tar: *2019-09-*: Cannot stat: No such file or directory
tar: Exiting with failure status due to previous errors

如果 tar 在有东西要放进去之前不创建新的 tarball 那就太好了,但我想这种改变会破坏一些现有的脚本。

我希望有一个命令行选项,我可以通过 bashrc 传递给 tar,以便在将来覆盖现有文件之前收到警告(如alias mv='mv -i'),但我找不到。

有没有什么好办法可以解除这把枪的武装?

答案1

简短的回答是没有。tar没有提供选项。与许多其他命令(dd、mkfs.*、cpio 等)一样,它假设您知道自己在做什么,并且如果您做错了什么,可能会破坏数据。

如果你发现自己经常这样做tar,你可以将你想要的行为包装tar在 shell 脚本中。例如:

~/bin/archive_and_remove tar_file files

在脚本中,我能想到三种方法来保护您免于覆盖 tarfile:

在执行 tar 之前检查文件名是否存在(无 --remove-files):

test -f TARFILENAME || tar ... FILES

如果成功则执行tar并删除文件(无--remove-files):

tar ... FILES && rm FILES

完成后保护文件(使用 --remove-files)。如果出现输出错误,则可以使用&&because tar不应删除文件:

tar --remove-files ... FILES && chown u-w TARFILENAME

相关内容