• Opret dig
  • Glemt adgangskode

User account menu

  • Artikler
  • Forside
  • Forum
  • Nyheder
  • Log ind
Hjem
LinuxIN.dk

Snak med

Opret dig!

Af peque | 06.07.2017 09:59

Bash script problemer

Hjælp generelt
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
  • Log ind eller opret dig for at tilføje kommentarer

Kommentarer7

# 1

7 år 12 måneder siden

Permalink

Indsendt af marlar den 7. juli 2017 kl. 21:36

Permalink

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* ?
  • Log ind eller opret dig for at tilføje kommentarer

# 2

7 år 12 måneder siden

Permalink

Indsendt af peque den 8. juli 2017 kl. 11:03

In reply to Er der kun en enkelt fil ad by marlar

Permalink

@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)


  • Log ind eller opret dig for at tilføje kommentarer

# 3

7 år 11 måneder siden

Permalink

Indsendt af mich den 9. juli 2017 kl. 02:54

Permalink

cp MRV* $A
cp Voyage*

cp MRV* $A
cp Voyage* $B

Eller?
  • Log ind eller opret dig for at tilføje kommentarer

# 4

7 år 11 måneder siden

Permalink

Indsendt af peque den 10. juli 2017 kl. 07:00

Permalink

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)
  • Log ind eller opret dig for at tilføje kommentarer

# 5

7 år 11 måneder siden

Permalink

Indsendt af peque den 10. juli 2017 kl. 07:44

Permalink

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



  • Log ind eller opret dig for at tilføje kommentarer

# 6

7 år 11 måneder siden

Permalink

Indsendt af frogmaster den 10. juli 2017 kl. 15:46

Permalink

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

  • Log ind eller opret dig for at tilføje kommentarer

# 7

7 år 11 måneder siden

Permalink

Indsendt af peque den 11. juli 2017 kl. 08:01

Permalink

@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
  • Log ind eller opret dig for at tilføje kommentarer

Svar søges

den er sjov 0
llumos Unix-operativsystem, 0
Den er go 0
14. februar = I Love Free Software Day 0
Lokal fil-deling - for de dovne. 0

Seneste aktivitet

"Intet realistisk alternativ" - mig i r*ven 17
Open source events i danmark? 3
Virtuel maskine? 4
Gode anmeldelser Zorin OS 17.3 8
Open Source-eksperimentet 5
En snak om Linux-kompatibel software 7
Nulstilling af adgangskode 6
PCLinuxOS 27
Ingen Mint 5
Linux App Store Flathub når 3 milliarder downloads 2
Digitaliseringsministeriet sætter gang i pilotprojekt om digital suverænitet 3
Mest sikker webbrowser 5
Firefox 2
Privatbeskeder 7
Backup/synkronisering? 3
BigLinux 5
Chatgpt satire 1
Læsning af databasefil i Firefox 2
Vanilla OS 15
Pepsi Challenge 4

© 2025 Linuxin og de respektive skribenter

Oprettet og drevet af nørder siden 2004 !