Ubuntu 的通配符 * 与 tar 以某种方式无法恢复某些文件是否合理?

H2O*_*aCl 3 bash tar ubuntu

在这个命令行序列中,我使用 *.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
Run Code Online (Sandbox Code Playgroud)

Mic*_*jer 9

当你这样做时:

tar xvpfz backup2011Sep06T0000.tgz ./javawork/Trader1/*.sh
Run Code Online (Sandbox Code Playgroud)

*.sh是由壳膨胀(假设任何./javawork/Trader1/*.sh存在)。因此,tar 将被 shell 执行为:

tar xvpfz backup2011Sep06T0000.tgz ./javawork/Trader1/goReloadOp.sh ./javawork/Trader1/goReloadAudit.sh ./javawork/Trader1/goTrade.sh
Run Code Online (Sandbox Code Playgroud)

如果您想将通配符传递给 tar,要说“请只提取我这些文件”,您需要单引号并添加--wildcards选项:

tar xvpfz backup2011Sep06T0000.tgz --wildcards './javawork/Trader1/*.sh'
Run Code Online (Sandbox Code Playgroud)