Re: Terminal – ls-like command for http directories?

Johnny Rosenberg gurus.knugum at gmail.com
Sat May 25 14:44:49 UTC 2013


2013/5/25 Johnny Rosenberg <gurus.knugum at gmail.com>:
> 2013/5/25 Johnny Rosenberg <gurus.knugum at gmail.com>:
>> 2013/5/25 Johnny Rosenberg <gurus.knugum at gmail.com>:
>>> Is this possible?
>>>
>>> Okay, an example:
>>> I have a script that downloads and installs unetbootin to my system. I
>>> run the script like this:
>>>
>>> ./Install.sh 583
>>>
>>> This downloads and ”installs” Unetbootin 5.83, which means it uses
>>> wget to download the file, then moves the file to a proper place and
>>> finally adds a link to it in ~/bin so I can run it by only typing:
>>> unetbootin
>>>
>>> Now, for this to work, I first need to find out what is the latest
>>> version, for instance by looking it up in my web browser. Then I can
>>> run my install script.
>>>
>>> Of course it would be more convenient if the script could find the
>>> latest version for me.
>>>
>>> The latest version (today, 2013-05-25) is:
>>> http://tenet.dl.sourceforge.net/project/unetbootin/UNetbootin/583/unetbootin-linux-583
>>>
>>> So what I need is a command like:
>>> some_ls-like_command
>>> "http://tenet.dl.sourceforge.net/project/unetbootin/UNetbootin/"
>>> Then I guess I would have a loop that determines the highest value
>>> somehow, but I guess I will figure that part out.
>>>
>>> That directory currently looks like this:
>>> 180/    -       21-Jul-2009 00:18
>>> 189/    -       17-Jul-2009 23:46
>>> 191/    -       17-Jul-2009 23:46
>>> 201/    -       17-Jul-2009 23:46
>>> 214/    -       29-Aug-2012 00:37
>>> 215/    -       06-Sep-2012 00:38
>>> 216/    -       27-Aug-2012 00:37
>>> 225/    -       17-Jul-2009 23:46
>>> 229/    -       17-Jul-2009 23:46
>>> 235/    -       17-Jul-2009 23:46
>>> 241/    -       17-Jul-2009 23:46
>>> 243/    -       17-Jul-2009 23:46
>>> 248/    -       27-Nov-2012 01:18
>>> 262/    -       10-Jul-2012 05:27
>>> 265/    -       17-Jul-2009 23:46
>>> 272/    -       11-Jul-2012 03:42
>>> 274/    -       17-Jul-2009 23:46
>>> 275/    -       12-Jul-2012 00:43
>>> 281/    -       17-Jul-2009 23:46
>>> 282/    -       13-Nov-2012 07:35
>>> 299/    -       03-Oct-2012 00:35
>>> 304/    -       22-Nov-2012 00:43
>>> 306/    -       08-Nov-2012 00:39
>>> 307/    -       12-Aug-2012 00:37
>>> 310/    -       17-Jul-2009 23:46
>>> 312/    -       15-Aug-2012 00:41
>>> 319/    -       18-Aug-2012 01:04
>>> 323/    -       01-Nov-2012 00:21
>>> 344/    -       01-Sep-2012 00:37
>>> 356/    -       17-Jul-2009 23:46
>>> 372/    -       20-Sep-2009 21:22
>>> 377/    -       28-Oct-2009 23:21
>>> 391/    -       01-Feb-2010 06:07
>>> 393/    -       15-Oct-2012 02:13
>>> 408/    -       13-Feb-2010 22:20
>>> 419/    -       11-Oct-2012 00:40
>>> 424/    -       27-Mar-2010 21:10
>>> 429/    -       27-Jan-2013 03:04
>>> 433/    -       19-Oct-2012 00:35
>>> 436/    -       22-Oct-2012 00:30
>>> 442/    -       23-Oct-2012 00:29
>>> 466/    -       03-Jun-2010 07:11
>>> 471/    -       31-Oct-2012 00:22
>>> 485/    -       03-Nov-2012 00:25
>>> 490/    -       01-Dec-2012 00:25
>>> 491/    -       02-Dec-2012 00:56
>>> 494/    -       11-Oct-2010 01:04
>>> 502/    -       22-Dec-2012 06:28
>>> 506/    -       14-Jan-2013 02:11
>>> 527/    -       27-Mar-2011 03:29
>>> 549/    -       15-Jan-2013 00:23
>>> 555/    -       17-Mar-2013 00:48
>>> 563/    -       27-Apr-2013 00:18
>>> 568/    -       21-May-2013 00:26
>>> 575/    -       28-Apr-2012 08:02
>>> 577/    -       13-Jul-2012 04:06
>>> 578/    -       15-Jul-2012 02:25
>>> 581/    -       27-Aug-2012 07:07
>>> 583/    -       24-Dec-2012 08:45
>>> Custom/
>>>
>>>
>>> Johnny Rosenberg
>>
>> Okay, I solved it, I think, see 3.1 in my script:
>> #!/bin/sh
>>
>> # To do:
>> # Some error handling, perhaps?
>>
>> # 1. Variables
>> UnetbootinPath="${HOME}/Eget/Nerladdat/Verktyg/Boot/Unetbootin"
>> OldVersionsPath="${UnetbootinPath}/Gamla versioner"
>> NewVersionPath="${UnetbootinPath}/Senaste"
>> RunPath="${HOME}/bin"
>>
>> DownloadPath="http://tenet.dl.sourceforge.net/project/unetbootin/UNetbootin"
>>
>> # 1.1. These folders are created by the next wget next command below.
>> SourceForgePath="${UnetbootinPath}/tenet.dl.sourceforge.net"
>> ContentsPath="${SourceForgePath}/project/unetbootin"
>>
>> # 2. Just doing an unnecessary parameter check…
>> if [ $# -ne 1 ]; then
>>         echo "Alla parametrar ignoreras."
>>         echo
>> fi
>>
>> # 3. Determine the latest version.
>> # No error handling at the moment…
>> wget -r "${DownloadPath}"
>>
>> # 3.1. The HTML file UNetbootin in ${ContentsPath} has been created. It contains
>> #      the sub-diectories of ${DownloadPath}. The second to last line represents
>> #      the sub-directory for the latest version.
>> Version=$(html2text "${ContentsPath}/UNetbootin" | \
>>         tail -2 | head -1 | sed -r 's/([0-9]*).*/\1/')
>> FileName="unetbootin-linux-${Version}"
>> rm -fr "${SourceForgePath}"
>>
>> # 3.2. Maybe the latest version is already installed?
>> if [ -f "${NewVersionPath}/${FileName}" ]; then
>>         echo "Senaste versionen är redan installerad."
>>         exit 1
>> fi
>>
>> # 4. Download the latest version.
>> wget "${DownloadPath}/${Version}/${FileName}"
>>
>> # 5. Add the run flag to the downloaded file.
>> chmod +x "${UnetbootinPath}/${FileName}"
>>
>> # 6. Move files to where they belong.
>> # 6.1. First, the file in ${NewVersionPath} isn't the newest anymore.
>> #      Now, move that file to the path for older versions.
>>
>> cd "${NewVersionPath}/"
>> mv $(ls | grep "unetbootin-linux") "${OldVersionsPath}/"
>>
>> # 6.2. Now, move the downloaded file to ${NewVersionPath}.
>> cd "${UnetbootinPath}"
>> mv $(ls | grep "unetbootin-linux") "${NewVersionPath}/"
>>
>> # 6.3. Create a link to the new file in ${RunPath}.
>> cd "${NewVersionPath}/"
>> ln -fs $(find "${NewVersionPath}/" | \
>>         grep "unetbootin-linux") "${RunPath}/unetbootin"
>>
>> cd "${UnetbootinPath}"
>>
>>
>> Now, after running this script, the latest version is located in the
>> latest version directory and a link to it, called ”unetbootin”, is
>> avaliable in ~/bin.
>> So I tried to open it by typing ”unetbootin” in a terminal, but it
>> failed to open. A password is needed to run unetbootin, and that
>> dialogue came up as expected. I entered my password, clicked OK, the
>> dialogue disappeared, but then nothing more happened.
>> If I type ~/bin/unetbootin, the program runs as expected.
>> ~/bin is included in $PATH as the first path, so I shouldn't really
>> need to type anything more than just unetbootin.
>>
>> I am obviously missing something, right?
>>
>>
>> Johnny Rosenberg
>
> I wrote the first version of this script back in 2009, I think, and
> now when I looked at it closer, I found some things that I did in an
> unnecessary complicated way… I edited that out now, so forget about
> the script I sent (which works but is bit ugly). Here's what I should
> have sent in the first place:
>
> #!/bin/sh
>
> # To do:
> # Some error handling, perhaps?
>
> # 1. Variables

Obviously, if you want to run this script, you need to edit these
paths to fit your own system.

> UnetbootinPath="${HOME}/Eget/Nerladdat/Verktyg/Boot/Unetbootin"
This is the path where I keep my Unetbootin downloads.

I keep old versions here (a sub-folder to the above):
> OldVersionsPath="${UnetbootinPath}/Gamla versioner"

And the latest version here (another sub-folder):
> NewVersionPath="${UnetbootinPath}/Senaste"

Here's where I want my link to appear, so I can run Unetbootin in a
terminal only typing unetbootin.
> RunPath="${HOME}/bin"
>

Here's where the different UNetbootin versions are located. Leave it
as is, of course, unless the developers put it somewhere else…
> DownloadPath="http://tenet.dl.sourceforge.net/project/unetbootin/UNetbootin"
>
> # 1.1. These folders are created by the next wget command below.

Also leave these as is, since you can't specify these anyway, as far as I know.
> SourceForgePath="${UnetbootinPath}/tenet.dl.sourceforge.net"
> ContentsPath="${SourceForgePath}/project/unetbootin"


Johnny Rosenberg

>
> # 2. Just doing an unnecessary parameter check…
> if [ $# -ne 1 ]; then
>         echo "Alla parametrar ignoreras."
>         echo
> fi
>
> # 3. Determine the latest version.
> # No error handling at the moment…
> wget -r "${DownloadPath}"
>
> # 3.1. The HTML file UNetbootin in ${ContentsPath} has been created. It contains
> #      the sub-diectories of ${DownloadPath}. The second to last line represents
> #      the sub-directory for the latest version.
> Version=$(html2text "${ContentsPath}/UNetbootin" | \
>         tail -2 | head -1 | sed -r 's/([0-9]*).*/\1/')
> FileName="unetbootin-linux-${Version}"
> rm -fr "${SourceForgePath}"
>
> # 3.2. Maybe the latest version is already installed?
> if [ -f "${NewVersionPath}/${FileName}" ]; then
>         echo "Senaste versionen är redan installerad."
>         exit 1
> fi
>
> # 4. Download the latest version.
> wget "${DownloadPath}/${Version}/${FileName}"
>
> # 5. Add the run flag to the downloaded file.
> chmod +x "${UnetbootinPath}/${FileName}"
>
> # 6. Move files to where they belong.
> # 6.1. First, the file in ${NewVersionPath} isn't the newest anymore.
> #      Now, move that file to the path for older versions.
> mv "${NewVersionPath}/"* "${OldVersionsPath}/"
>
> # 6.2. Now, move the downloaded file to ${NewVersionPath}.
> mv "${UnetbootinPath}/${FileName}" "${NewVersionPath}/"
>
> # 6.3. Create a link to the new file in ${RunPath}.
> ln -fs "${NewVersionPath}/${FileName}" "${RunPath}/unetbootin"
>
> Other than this, all suggestions and hints are welcome regarding the
> design of this script. Since I created it, I modified it a bit now and
> then. I am still at some beginner level, so I appreciate hints if you
> find things that isn't done optimally in this script.
>
>
> Thanks.
>
>
> Johnny Rosenberg




More information about the ubuntu-users mailing list