情况就是这样.我有一个我需要提取和设置的URL列表.它的所有变量驱动,但在我提取后,我不知道我的文件夹将被调用.如果我不知道它叫什么,我就不能把CD放进去.
$DL_DIR = /opt/ $URL = http://Nginx.org/download/Nginx-1.3.3.tar.gz $FILE=${URL##*/} $CONFIG = "-- core" cd "$DL_DIR" wget $URL tar xzf $FILE cd <HOW DO I GO INTO IT?> ./configure "$CONFIG" make make install rm $FILE
如果这不解释它请说.我真的想要解决这个问题,但我很难解释它.
因为我希望它能够用于任何一组URL,它们可能有两种格式,如“.tar.gz”或一种格式“.zip”,并且文件名可能有.如“Python2.3.4”或者可能不是“Nginx” “,这有点棘手.
解决方法
#! /bin/bash # # Problem: # find the path of the "root" folder in an archive # # Strategy: # list all folders in the archive. # sort the list to make sure the shortest path is at the top. # print the first line # # Weak point: # assumes that tar tf and unzip -l will list files in a certain way # that is: paths ending with / and that the file-list of unzip -l # is in the fourth column. # LIST_FILES= FILE=$1 case ${FILE##*.} in gz) LIST_FILES="tar tf $FILE" ;; tgz) LIST_FILES="tar tf $FILE" ;; zip) LIST_FILES='unzip -l '$FILE' | awk "{print \$4}"' ;; esac ARCHIVE_ROOT=$( echo $LIST_FILES | sh |\ grep '/$'|\ sort |\ head -n1 ) # we should have what we need by now,go ahead and extract the files. if [ -d "$ARCHIVE_ROOT" ]; then cd "$ARCHIVE_ROOT" else # there is no path (whoever made the archive is a jerk) # ...or the script Failed (see weak points) exit 1 fi