tar
传递给命令的错误参数导致file1
无法使用!正确的文件命令tar
是:
$ tar cvf total.tar file1 file2
但使用以下格式后我无法恢复file1
$ tar cvf file1 file2 total.tar
file2
tar: total.tar: Cannot stat: No such file or directory
tar: Exiting with failure status due to previous errors
$ ls -ltr
total 16
-rw-r----- 1 3 Apr 26 11:55 file2
-rw-r----- 1 10240 Apr 26 11:57 file1
$ file file1
file1: POSIX tar archive (GNU)
$ tar zxvf fil1
tar (child): fil1: Cannot open: No such file or directory
tar (child): Error is not recoverable: exiting now
tar: Child returned status 2
tar: Error is not recoverable: exiting now
答案1
您要求tar
将文件存档file2
并total.tar
放入名为 的存档中file1
,它试图执行此操作。不幸的是,这意味着它file1
被覆盖了,你现在能从中得到的是file2
:
tar tvf file1
(不要z
在其中添加 a,您在创建存档时没有指定它)。
恢复的唯一方法file1
是通过备份。
答案2
说明:f
incvf
是该选项的快捷方式-f
,它期望将要 tar 的目标文件的名称作为下一个参数。 @AndrewHenle 和 @StephenKitt 已经描述了切换参数顺序的结果。
答案3
这是 的定义中众所周知的陷阱tar command line syntax
。
使用 my 代替可以避免该问题star
。
star
当您在名称下调用它时,使用不同的错误更少的明智的 CLI 定义,并且它仍然比传统的 tar 实现安全得多,因为当调用为 时star
它不会覆盖。plain files
tar