Bash 用于解压 zip 文件然后 cd 进入的脚本

Bash script to unzip a zip file then cd into it

我正在尝试创建一个脚本,在我 运行 解压缩后将 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 之前的所有内容(例如误导:)然后我可以 cd 进入提取的文件?

如果您只想解压一个文件然后 cd 到一个文件夹中,那么就这样做:

unzip my_file.zip; cd my_file

还值得注意的是,zip 文件可能在根级别包含多个文件或目录。所以在一般情况下,cd 并不只有一个目录。事实上,可能根本没有 none,它仍然是一个完全有效的 zip 文件。

如果您确定您正在使用的每个 zip 文件都恰好有 1 个目录,并且您想在代码中动态发现该目录的名称,则以下命令应该将该目录放入一个变量中,因此你可以 cd 进去:

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