Sida 1 av 1

Hjälp med skript som kopierar eller mergar textfiler... [LÖST]

Postat: 30 nov 2007, 17:36
av HenrikAn
Jag har fixat en xml-fil med svenska internetradiokanaler för Amarok.
För att undvika att någon raderar sin egna fil som kanske redan innehåller några mödosamt inlagda kanaler funderar jag på att skicka med ett skript som lägger till kanalerna...

Packa upp bifogad tarboll för att se hur jag tänkt mig det hela...
Skriptet kan kanske se ut något i den här stilen:

Kod: Markera allt

#!/bin/sh
#
#Script to install swedish internet radio channels for Amarok
#
#
f_pause()
{
    key=""
    echo -n "Tryck Enter för att avsluta."
    stty -icanon
    key=`dd count=1 2>/dev/null`
    stty icanon
}

if [ -s $HOME/.kde/share/apps/amarok/streambrowser_save.xml ]
then
    cp $HOME/.kde/share/apps/amarok/streambrowser_save.xml $HOME/.kde/share/apps/amarok/streambrowser_save.xml.$(date +'%F')
        echo "En backup av den existerande filen har gjorts och återfinns här: $HOME/.kde/share/apps/amarok/streambrowser_save.xml.$(date +'%F')\n"
	echo "Lägger till de svenska internetradiokanalerna i den befintliga filen"
	sed '$d' $HOME/.kde/share/apps/amarok/streambrowser_save.xml.$(date +'%F') > $HOME/.kde/share/apps/amarok/streambrowser_save.xml
	sed '1d' streambrowser_save.xml |sed '1d'| cat >> $HOME/.kde/share/apps/amarok/streambrowser_save.xml
else
    echo "Ingen fil hittades, kopierar...\n"
    cp streambrowser_save.xml $HOME/.kde/share/apps/amarok/.
fi

echo "Nu ska allt vara klart.\n"
echo "Starta Amarok och titta så allt ser okey ut."
echo "Skulle något vara fel tar du bort streambrowser_save.xml och döper om backuppen streambrowser_save.xml.$(date +'%F') till samma namn.\n\n"

f_pause
echo "..."
sleep 2

exit 0
Vad kan gå fel?
Ska jag kontrollera fler saker?
Är det dumt att ha "fort och fel" som ordspråk?

SV: Hjälp med skript som kopierar eller mergar textfiler...

Postat: 01 dec 2007, 14:03
av Konservburk
HenrikAn skrev: Packa upp bifogad tarboll för att se hur jag tänkt mig det hela...
Var hittar jag "bifogad tarboll"?

SV: Hjälp med skript som kopierar eller mergar textfiler...

Postat: 01 dec 2007, 15:49
av HenrikAn
Räcker det inte att jag TÄNKER bifoga en fil. Ska det vara så petigt!? :)

SV: Hjälp med skript som kopierar eller mergar textfiler...

Postat: 01 dec 2007, 17:53
av Konservburk
HenrikAn skrev: Vad kan gå fel?
Ska jag kontrollera fler saker?
* Din tarboll är en tarbomb: http://en.wikipedia.org/wiki/Tarbomb

* Använd variabler.  Det kan till och med hända att klockan slår om och att
"$(date +'%F')" helt plötsligt ger ett annat värde halvägs genom skriptet.

* Du borde se till att det verkligen finns en ~/.kde

* Använd mv istället för cp när du skapar backup-filen.  Då behålls tstamp,
vilket är bra om man vill veta när man senast ändrade på filen själv.

* Var försiktig med echo "\n", speciellt om du använder /bin/sh.  Om t.ex.
/bin/sh pekar på /bin/bash så kommer "\n" att skrivas ut som det är och
inte ge någon nyrad.  Det är bättre att använda ett extra echo om man
vill ha en extra nyrad.

* Vad är tanken med din andra sed-rad?  Om du vill ta bort de två första
raderna i filen så är det bättre att köra sed '1,2d'.

* Det kommer ett meddelande om hur man återställer backup-filen även
när ingen backup-fil finns.


Förbättringsförslag:

Kod: Markera allt

#!/bin/sh

DIR=~/.kde/share/apps/amarok
SOURCE_FILE=streambrowser_save.xml
FILE="$DIR/$SOURCE_FILE"

test -d "$DIR" || mkdir -p "$DIR" || exit

if test -s "$FILE"
then
   BACKUP_FILE="$FILE.$(date +'%F')"
   mv -i "$FILE" "$BACKUP_FILE"
   echo "En backup av den existerande filen har gjorts och återfinns här: $BACKUP_FILE"
   echo
   echo "Lägger till de svenska internetradiokanalerna i den befintliga filen"
   sed '$d' "$BACKUP_FILE" > "$FILE"
   sed '1,2d' "$SOURCE_FILE" >> "$FILE"
else
   echo "Ingen fil hittades, kopierar..."
   echo
   cp "$SOURCE_FILE" "$FILE"
fi

echo "Nu ska allt vara klart."
echo
echo "Starta Amarok och titta så allt ser okey ut."

if test -e "$BACKUP_FILE"
   echo "Skulle något vara fel tar du bort $FILE och döper om backuppen $BACKUP_FILE till samma namn."
   echo
   echo
fi

SV: Hjälp med skript som kopierar eller mergar textfiler...

Postat: 02 dec 2007, 01:09
av HenrikAn
Tack!
Med så pedagogisk hjälp kanske det till och med kan bli ordning på mig! :)
(Och min konstiga sed-rad berodde på att jag i min referens litteratur google inte lyckades hitta vad jag letade efter... 1,2d  ::))

SV: Hjälp med skript som kopierar eller mergar textfiler...

Postat: 02 dec 2007, 10:50
av mcNisse
* Använd mv istället för cp när du skapar backup-filen.  Då behålls tstamp,
vilket är bra om man vill veta när man senast ändrade på filen själv.
Du kan använda cp -p för att behålla tidsstämplar.

SV: Hjälp med skript som kopierar eller mergar textfiler...

Postat: 02 dec 2007, 12:57
av Konservburk
mcNisse skrev:
* Använd mv istället för cp när du skapar backup-filen.  Då behålls tstamp,
vilket är bra om man vill veta när man senast ändrade på filen själv.
Du kan använda cp -p för att behålla tidsstämplar.
Såklart du kan, men då kommer du skriva hela filen en extra gång.

SV: Hjälp med skript som kopierar eller mergar textfiler...

Postat: 02 dec 2007, 13:09
av mcNisse
Såklart du kan, men då kommer du skriva hela filen en extra gång.
Det beror väl på om de ligger på samma filsystem. Men visst jag kan se fördelar med bägge varianterna.

SV: Hjälp med skript som kopierar eller mergar textfiler...

Postat: 02 dec 2007, 14:20
av Konservburk
mcNisse skrev:
Såklart du kan, men då kommer du skriva hela filen en extra gång.
Det beror väl på om de ligger på samma filsystem.
Samma katalog brukar betyda samma filsystem :)