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