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