Ubuntu 的 tar 通配符 * 有可能无法恢复某些文件?

Ubuntu 的 tar 通配符 * 有可能无法恢复某些文件?

在此命令行序列中,我使用 *.sh 通配符来恢复一些文件。我得到了三个结果。我知道肯定还有更多,所以我输入了整个名称。例如:goFindRanges.sh。我能够恢复另一个文件。通配符怎么会搞砸呢?

我的 .tgz 存档位于硬盘上,而不是光学介质上。我在 Ubuntu 10.10 上使用 bash。

b@maui:~$ tar xvpfz backup2011Sep06T0000.tgz ./javawork/Trader1/*.sh
./javawork/Trader1/goReloadOp.sh
./javawork/Trader1/goReloadAudit.sh
./javawork/Trader1/goTrade.sh
b@maui:~$ tar xvpfz backup2011Sep06T0000.tgz ./javawork/Trader1/goFindRanges.sh
./javawork/Trader1/goFindRanges.sh

答案1

通配符扩展了磁盘上已有的内容,而不是存档(tgz)中的内容。

答案2

当你这样做时:

tar xvpfz backup2011Sep06T0000.tgz ./javawork/Trader1/*.sh

由 shell展开*.sh(假设存在 ./javawork/Trader1/*.sh)。因此,tar 将由 shell 执行,如下所示:

tar xvpfz backup2011Sep06T0000.tgz ./javawork/Trader1/goReloadOp.sh ./javawork/Trader1/goReloadAudit.sh ./javawork/Trader1/goTrade.sh

如果您想要将通配符传递给 tar,表示“请仅提取那些文件”,您需要用单引号引起来并添加--wildcards选项:

tar xvpfz backup2011Sep06T0000.tgz --wildcards './javawork/Trader1/*.sh'

相关内容