如何使脚本提取 tar 然后进入提取的 tar 目录?
我在尝试
提取物
#!/bin/bash
tar -xvf $1 && cd $1
使用示例
假设有foo.tar.xz
那么如何使用它:./xtract foo.tar.xz
所以你可以看到我的问题在于参数,我成功提取它但由于文件扩展名而无法输入它。那么如何在参数中删除它以便我可以进入foo
目录
如何使脚本提取 tar 然后进入提取的 tar 目录?
我在尝试
提取物
#!/bin/bash
tar -xvf $1 && cd $1
使用示例
假设有foo.tar.xz
那么如何使用它:./xtract foo.tar.xz
所以你可以看到我的问题在于参数,我成功提取它但由于文件扩展名而无法输入它。那么如何在参数中删除它以便我可以进入foo
目录
shell 脚本永远不能更改其父进程(调用脚本的 shell)的工作目录。因此,尽管您可能会更改到脚本中创建的目录,但一旦脚本终止(并且它的环境被破坏,包括特定目录是进程的当前目录这一事实),您将发现自己在任何目录中当你执行脚本时。
但是,shell 函数在当前 shell 会话中执行,并且可以
cd
按照您期望的方式设置会话的当前工作目录。以下是一个 shell 函数,它尝试提取
tar
在其命令行上给出的存档,如果成功,则更改为存档名称提供的目录,并.tar
从末尾删除(这是使用标准参数扩展完成的)。您可以通过将上述内容粘贴到您的 shell 中来定义此函数,或者您可以将其添加到您通常添加 shell 函数和别名的任何位置,并且它将在您启动的下一个 shell 会话中可用。
如果您想支持
xz
-compressedtar
存档,您可能需要更改上述功能,以便它使用正确的选项tar
或您的系统(-J
或--xz
使用 GNUtar
,例如),或通过xz -d -c -- "$1"
管道将存档从tar -x -v -f -
. 您还必须调整cd
命令,使其删除.tar.xz
而不是仅从.tar
给定存档文件名的末尾删除。如果您足够聪明,
tar
可以使用文件名后缀来正确确定压缩算法,那么您可以通过与前一个函数的不同之处在于,我们先剥离
.tar
后跟一个点,然后是存档名称末尾的任何字符串,以到达我们尝试cd
进入的目录。