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.
derfra får jeg selve fil navnet - og vil derfor sætte et variable alt efter om det hedder MRV eller Voyage
PFT
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
Kommentarer7
Er der kun en enkelt fil ad
@marlarDen skal i det
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)
cp MRV* $A
cp Voyage*
cp MRV* $A
cp Voyage* $B
Eller?
Hej Marlar.
Jeg var
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)
Har prøvet lidt ala det her
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
Jeg var mere ude i
--------
#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
@frogmaster
Lige for at
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