在此命令行序列中,我使用 *.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'