Bash script problemer

peque
Antal: 843
Tilmeldt:
20-04-2005
User is offline
Bash script problemer

hej Forum.
Jeg ville gerne have løst et lille problem vedr et bashscript

Jeg modtager en fil i en mappe på min Linux maskiune.
Enter starter filen med MRV eller Voyage -ø men en masse forskellige tegn efter ( Dato/tid mm)

Hvordan kan jeg kende forskel på disse filer på en nem måde.
De skal uploades til et fjerne bibliotek med Forskellige sti til hvor de skal uploades.

Jeg har resten af scriptet - det er kun hvordan jeg finder forskellen imellem de 2 typer fil der leveres ( begge er xls filer)
Men hvor de skal leveres er forskellig alt efter hvad filen hedder - derfor skal jeg differencere imellem storage pladsen

Jeg bruge denne kommando til at finde mit filnavn.

NAME=`find -not -iname "*.pdf" ! -iname ".*"`

derfra får jeg selve fil navnet - og vil derfor sætte et variable alt efter om det hedder MRV eller Voyage

PFT


marlar
Antal: 2784
Tilmeldt:
05-12-2009
User is offline
Er der kun en enkelt fil ad

Er der kun en enkelt fil ad gangen, eller er der en bunke af filer hvoraf nogle hedder MRV* og nogle Voyage* ?


peque
Antal: 843
Tilmeldt:
20-04-2005
User is offline
@marlarDen skal i det

@marlar

Den skal i det daglige håndterer 1 fil af gangen - men der kan riskere at komme flere filer på en gang.

Nu har jeg faktisk lavet lidt om på det for at afhjælpe dette :-)
Jeg har lavet et script der reelt henter filen fra FTP server i en løkke - og fra den løkkke kalder flytningen pr script - så det er en fil pr. gang!

Men derfra mangler jeg stadig at finde ud hvordan jeg skiller pr filnavn hvor den skal kopieres hen.

Så hvis det er det ene navn - skal min sti være A ( filen hedder MRV_XXXXXXXXXXXXXXXX )
Er det ikke det navn - skal det være B ( filen hedder Voyage_XXXXXXXXXXXXX )
( hvor XXXXXXXXXXXXX er dato og tid)


mich
mich's picture
Antal: 925
Tilmeldt:
13-10-2007
User is offline
cp MRV* $A cp Voyage*

cp MRV* $A
cp Voyage* $B

Eller?

./mich


peque
Antal: 843
Tilmeldt:
20-04-2005
User is offline
Hej Marlar. Jeg var

#0:
Hej Marlar.

Jeg var mere ude i noget
If [ $PDF == "MRV*" ]
then
PATH = A
Else
PATH = B
fi

Det er selve if statementet jeg ville have på plads
Alternativt er det at skrive som du har gjort - Men eftersom det skal kopieres flere steder hen ( flere destinationer - men samme struktur)


peque
Antal: 843
Tilmeldt:
20-04-2005
User is offline
Har prøvet lidt ala det her

Har prøvet lidt ala det her - MEN jeg får ikke mit RDIR med :-( men jeg går ikke det RDIR som skal bruges i den placering hvorf filen skal gemmes

DIR="/opt/upload"
DATE="`date +%D_%R:%S`:"
STORAGE="172.16.30.3"
USER="test"
PASS="test"
LOG=/var/log/report.log
RDIR=""

# Script starting
cd $DIR
if [ ${#DIR[@]} -gt 0 ];
then
        echo "$DATE Found file $NAME and start converting" >> $LOG
        # Convert from XLS to ODS TO PDF
        /usr/bin/libreoffice --headless --convert-to ods *.xls >> $LOG
        /usr/bin/libreoffice --headless --convert-to pdf *.ods >> $LOG
        echo "$DATE Converting $NAME finished" >> $LOG
        # Removing ODS & XLS Files
        rm -f $DIR/*.ods
        rm -f $DIR/*.xls
        # Finding type of report by name
        PDF=$(find /opt/upload/ -type f -printf "%f\n" -iname "*.pdf")
        for name in ${PDF[@]}; do
                unset MRV
                unset VOYAGE
                MRV=$(echo "$name" | grep "MRV")
                VOYAGE=$(echo "$name" | grep "VOYAGE")
        if [[ -n $MRV ]]; then
                $RDIR="MRV"
                echo "MRV" >> $LOG
        elif [[ -n $VOYAGE ]]; then
                $RDIR="VOYAGE"
                echo "VOAYAGE" >> $LOG
        fi
done

        echo "$DATE moving $PDF to share $STORAGE" >> $LOG
        /usr/bin/smbclient -U $USER%$PASS //$STORAGE/ -I $STORAGE --directory $RDIR -c "put $PDF"
#       cp -f $PDF /data/$LDIR
#       rm -f $PDF
else
                echo "$DATE No Files found for converting" >> $LOG
                exit 0
fi


frogmaster
frogmaster's picture
Antal: 3174
Tilmeldt:
20-05-2010
User is offline
Jeg var mere ude i

En eller anden har glemt at afslutte et tag, der resulterer i at hele tråden har ændret font style ;)

--------

#4: Jeg var mere ude i noget
If [ $PDF == "MRV*" ]
then
PATH = A
Else
PATH = B
fi

Har prøvet lidt ala det her - MEN jeg får ikke mit RDIR med :-( men jeg går ikke det RDIR som skal bruges i den placering hvorf filen skal gemmes

Altså, jeg er ikke dygtig nok til at scripte uden et system at afprøve det på, men du skal definere stierne, også til destination, enten som en variabel eller direkte i if. Jeg forestiller mig noget lignende dette, alt efter i hvilken retning filen skal kopieres, og om forbindelsen er oprettet:

scp /path/to/file user_name@to_server_a:/path/to/destination

scp user_name@to_server_b:/path/to/file /path/to/destination

Derfor vil jeg ikke give mig i kast med din opgave, kun at vise et eksempel, der intet har med dit at gøre, men hvor jeg håber du kan bruge noget derfra:

#!/bin/bash

# Define variables
DIR_NAME_1=~/.config/google-chrome/Default/
DIR_NAME_2=~/.cache/

# Define function (force to use Enter key)
PAUSE_ENTER(){
echo -e "Press \033[33;1m[Enter]\033[0m key to continue..."
read -s -p "" fackEnterKey
}

# Delete Chrome Favicons
echo "Preparing to delete Favicons in Google Chrome" >&2
if [[ -d $DIR_NAME_1 ]]; then
    if cd $DIR_NAME_1 ; then
        rm -f Favicons
        rm -f Favicons-journal
        echo -e "\033[33;1mDone\033[0m" >&2
    else
        echo -e "\033[1;31;1mAborting - Cannot cd to '$DIR_NAME_1'\033[0m" >&2
#    exit 1
    fi
else
    echo -e "\033[1;31;1mAborting - No such directory: '$DIR_NAME_1'\033[0m" >&2
#    exit 1
fi
echo
# exit

# Delete files and folders recursively within the user cache
echo "Preparing to delete everything in user cache" >&2
if [[ -d $DIR_NAME_2 ]]; then
    if cd $DIR_NAME_2 ; then

        # Read function (wait for Enter to be pressed)
        PAUSE_ENTER

        # Delete ~/.cache files and suppress stdout and stderr
        rm -r -f .* * &>/dev/null
        echo -e "\033[33;1mDone\033[0m" >&2
    else
        echo -e "\033[1;31;1mAborting - Cannot cd to '$DIR_NAME_2'\033[0m" >&2
#    exit 1
    fi
else
    echo -e "\033[1;31;1mAborting - No such directory: '$DIR_NAME_2'\033[0m" >&2
#    exit 1
fi
echo
# exit
$SHELL


peque
Antal: 843
Tilmeldt:
20-04-2005
User is offline
@frogmaster Lige for at

@frogmaster
Lige for at beskrive - Jeg har hele min kopiering på plads ( altså delen hvor filen kopieres)

Løsningen var følgende:
if [[ $REPORT == MRV* ]]; then
path = A
fi