我不小心运行了两次相同的命令:
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