Bash脚本解压缩zip文件然后cd进去

时间:2016-01-29 00:39:09

标签: regex bash unzip

我正在尝试创建一个脚本,在运行解压缩后将CD刻录到文件中。我已经为.tar文件完成了这个,但是却无法提供zip的正则表达式。这是我用强制覆盖解压缩的命令。

unzip -o my_file.zip

Archive:  my_file.zip
inflating: my_file/load.file
inflating: my_file/eccn.txt
inflating: my_file/my_file.tgz

以下是我尝试使用sed

的内容
unzip -o my_file.zip | sed "s|/.*$||"
Archive:  my_file.zip
  inflating: my_file
  inflating: my_file
  inflating: my_file

以下是我处理.tar文件的方法:

tar -xvzf $fname                                        #tar it
topDir=$(tar -xvzf $fname | sed "s|/.*$||" | uniq)      #tars it verbosely and pipes it to uniq
[ $(wc -w <<< $topDir) == 1 ] || exit 1                 #check to see there is one entry in $topDir
cd $topDir                                              #cd into $topDir
echo your current dir is $PWD

tar -xvzf my_file.tgz | sed "s|/.*$||"
my_file
my_file
my_file
my_file
my_file

我的问题是如何摆脱my_file之前的所有事情(例如infalting :)然后我可以cd到提取的文件中?

1 个答案:

答案 0 :(得分:1)

如果要做的只是将文件解压缩到cd文件夹,请执行以下操作:

unzip my_file.zip; cd my_file

还值得注意的是,zip文件可能在根级别包含多个文件或目录。因此,在一般情况下,cd到目前为止只有一个目录。事实上,根本就没有,它仍然是一个完全有效的zip文件。

如果您确定您正在使用的每个zip文件都有1个目录,并且您希望在代码中动态发现该目录的名称,则以下命令应该将该目录转换为变量,所以你可以cd进入它:

DIR=$(zipinfo -1 my_file.zip | grep -oE '^[^/]+' | uniq)
unzip my_file.zip
cd $DIR