Toon posts:

Automatisch elke dag een txt bestand ophalen.

Pagina: 1
Acties:

Vraag


  • marcel19
  • Registratie: September 2012
  • Laatst online: 06:45
Mijn vraag
Ik moet elke dag een bestand van een server afhalen ( txt bestand ) voor mijn werk.
Nou is dat natuurlijk geen moeite even klikken en klaar. maar ik wilde het automatiseren.
Ik kan wel een standaard wget maken alleen het nadeel is, is dat het bestandsnaam van die file elke dag de datum erin heeft staan:

Gisteren: Werkzaamheden_06_02_21.txt
Vandaag: Werkzaamheden_07_02_21.txt

Relevante software en hardware die ik gebruik
Ik ben in het bezit van een intel nuc met daarop Debian dus een PHP script zou het beste daar op kunnen draaien. Als de file gedownload is kan hem ook nog wel naar mijn NAS server krijgen.

Wat ik al gevonden of geprobeerd heb
Ik kan een standaard wget maken, en in de cron gooien dat lukt wel.
Maar omdat we hier dus te maken hebben met oplopende data loop ik een beetje vast.

Ik ben dus op zoek naar iemand die mij op weg kan helpen, of een goeie website waar het stap voor stap uitgelegd wordt hoe ik het moet maken met oplopende datums :)

Alle reacties


  • Groentjuh
  • Registratie: September 2011
  • Laatst online: 10:28
nvm

[Voor 94% gewijzigd door Groentjuh op 07-02-2021 15:05]


  • pjottum
  • Registratie: Mei 2000
  • Laatst online: 11:07

pjottum

¯\_(ツ)_/¯

Nou, zoiets?

code:
1
2
3
4
#/bin/bash
bestand=$(date +"Werkzaamheden_%d_%m_%Y.txt")

wget mijn.web.server/${bestand}

ping 127.212.23.124


  • Mr. HTTP
  • Registratie: November 2020
  • Laatst online: 09-03-2022
Toevoeging op @pjottum

De code van @pjottum opslaan in een shell script ( bijv. grabtxt.sh ), uitvoerbaar maken met chmod (+x) en dan toevoegen als commando (pad naar het bestand als commando) in de cron line. PHP gebruiken is niet nodig.

[Voor 9% gewijzigd door Mr. HTTP op 07-02-2021 15:14]


  • marcel19
  • Registratie: September 2012
  • Laatst online: 06:45
Mr. HTTP schreef op zondag 7 februari 2021 @ 15:13:
Toevoeging op @pjottum

De code van @pjottum opslaan in een shell script ( bijv. grabtxt.sh ), uitvoerbaar maken met chmod (+x) en dan toevoegen als commando (pad naar het bestand als commando) in de cron line. PHP gebruiken is niet nodig.
Ok super.

Alleen dit pakt het hele jaartal: 2021. en het bestand heeft enkel _21 op het einde.
Hoe zet ik dat goed?

  • Mr. HTTP
  • Registratie: November 2020
  • Laatst online: 09-03-2022
marcel19 schreef op zondag 7 februari 2021 @ 15:17:
[...]


Ok super.

Alleen dit pakt het hele jaartal: 2021. en het bestand heeft enkel _21 op het einde.
Hoe zet ik dat goed?
Op de commandline dit uitvoeren (dan leer je wat je aan het doen bent) ;)
code:
1
date --help

[Voor 6% gewijzigd door Mr. HTTP op 07-02-2021 15:19]


  • EvH
  • Registratie: Juli 2014
  • Nu online
%Y —> %y

[Voor 11% gewijzigd door EvH op 07-02-2021 15:19]


  • marcel19
  • Registratie: September 2012
  • Laatst online: 06:45
Thank iedereen.

Nu gaat het goed komen. Simpel maar ik kwam er niet uit.

Bedankt @Mr. HTTP @EvH @pjottum

  • Mr. HTTP
  • Registratie: November 2020
  • Laatst online: 09-03-2022
Misschien moet je nog even een cd doen in het script (voordat je wget aanspreekt) zodat het wordt opgeslagen in de juist map

code:
1
cd /opslaan/in/deze/map

  • marcel19
  • Registratie: September 2012
  • Laatst online: 06:45
Mr. HTTP schreef op zondag 7 februari 2021 @ 15:23:
Misschien moet je nog even een cd doen in het script (voordat je wget aanspreekt) zodat het wordt opgeslagen in de juist map

code:
1
cd /opslaan/in/deze/map
Oh maar ik heb een map aangemaakt en daar het script in gezet.
via cron laten uitvoeren elke ochtend om 08:00 gaat dus helemaal goed. :)

  • TweakerNummer
  • Registratie: September 2001
  • Niet online
Mr. HTTP schreef op zondag 7 februari 2021 @ 15:23:
Misschien moet je nog even een cd doen in het script (voordat je wget aanspreekt) zodat het wordt opgeslagen in de juist map

code:
1
cd /opslaan/in/deze/map
Of gebruik --directory-prefix

  • marcel19
  • Registratie: September 2012
  • Laatst online: 06:45
Nog 1 vraagje erbij :)

Hoe kan ik ervoor zorgen dat het bestand van gisteren eerst automatisch verwijderd wordt en daarna pas de nieuwe binnengehaald wordt?

NVM.

heb er wget -cO - HTTP://server/${bestand} > Werkzaamheden vandaag.txt van gemaakt.
Misschien dat ik de O - nog weghaal later maar is even kijken hoe dit gaat morgen.

[Voor 36% gewijzigd door marcel19 op 07-02-2021 15:34]


  • Mr. HTTP
  • Registratie: November 2020
  • Laatst online: 09-03-2022
marcel19 schreef op zondag 7 februari 2021 @ 15:26:
Oh maar ik heb een map aangemaakt en daar het script in gezet.
via cron laten uitvoeren elke ochtend om 08:00 gaat dus helemaal goed. :)
cd = change directory
Dit is meer als extraatje zodat je zeker weet dat het in de juiste map terechtkomt als wget het download.

wget gebruikt namelijk de huidige directory (cwd) als downloaddir. Het ligt eraan hoe je het script aanspreekt (cron/direct) maar dat hoeft niet altijd te zijn wat je wilt dat het is...

  • pjottum
  • Registratie: Mei 2000
  • Laatst online: 11:07

pjottum

¯\_(ツ)_/¯

Ik zou hem vandaag ook even uitvoeren, maar dan met de hand, zie je wat er gebeurd :)

Ff kijken waar zijn we:

code:
1
2
3
4
5
6
7
8
#/bin/bash
bestand=$(date +"Werkzaamheden_%d_%m_%y.txt")
oudbestand=$(date -d '-1 day' +"Werkzaamheden_%d_%m_%y.txt")
demap=/opslaan/in/deze/map

[ -f ${demap}/$oudbestand} ] && rm ${demap}/$oudbestand} || echo "oh, dat is jammer, die is er niet"

wget -o /dev/null mijn.web.server/${bestand} -P $(demap}
marcel19 schreef op zondag 7 februari 2021 @ 15:30:
Nog 1 vraagje erbij :)

Hoe kan ik ervoor zorgen dat het bestand van gisteren eerst automatisch verwijderd wordt en daarna pas de nieuwe binnengehaald wordt?

NVM.

heb er wget -cO - HTTP://server/${bestand} > Werkzaamheden vandaag.txt van gemaakt.
Misschien dat ik de O - nog weghaal later maar is even kijken hoe dit gaat morgen.
Je lijkt een klant.
Elke keer de specs aanpassen.

:) :)

Bijzonder werk ook wel trouwens?

[Voor 37% gewijzigd door pjottum op 07-02-2021 15:37. Reden: quote]

ping 127.212.23.124


  • Mr. HTTP
  • Registratie: November 2020
  • Laatst online: 09-03-2022
marcel19 schreef op zondag 7 februari 2021 @ 15:30:
Nog 1 vraagje erbij :)

Hoe kan ik ervoor zorgen dat het bestand van gisteren eerst automatisch verwijderd wordt en daarna pas de nieuwe binnengehaald wordt?
Kan je dan niet gewoon vooraf heel de directory leeghalen want zoals ik het nu begrijp:

1) 1 bestand in de map; die van vandaag
2) - dag later-
3) map leeg maken
4) bestand van vandaag downloaden

  • Mr. HTTP
  • Registratie: November 2020
  • Laatst online: 09-03-2022
pjottum schreef op zondag 7 februari 2021 @ 15:35:
Je lijkt een klant.
Elke keer de specs aanpassen.
_O-

  • marcel19
  • Registratie: September 2012
  • Laatst online: 06:45
Mr. HTTP schreef op zondag 7 februari 2021 @ 15:36:
[...]


Kan je dan niet gewoon vooraf heel de directory leeghalen want zoals ik het nu begrijp:

1) 1 bestand in de map; die van vandaag
2) - dag later-
3) map leeg maken
4) bestand van vandaag downloaden
Dat dacht ik eerst ook.
Maar misschien handig om toch iets van een back-up te hebben in een sub folder :)

  • Mr. HTTP
  • Registratie: November 2020
  • Laatst online: 09-03-2022
marcel19 schreef op zondag 7 februari 2021 @ 15:43:
Dat dacht ik eerst ook.
Maar misschien handig om toch iets van een back-up te hebben in een sub folder :)
cp of mv command dan

Overigens alles wat je hier nu vraagt kun je vinden door te googlen:

"how to copy file in bash"
"how to remove file in bash"
"how to get the date in bash"
"how to remove all files in a directory in bash"
etc. (het is allemaal niet bash-specifiek, maar ook linux, maar als je zo zoekt werkt het beter)
Je kunt ook gewoon zoeken op de GNU bash manual.

of extra hulp direct in linux zelf (cp als voorbeeld command):

code:
1
2
3
4
5
6
7
8
# quick/short help, --help argument
cp --help

# soms ook -h argument
cp -h

# manuals
man cp

[Voor 31% gewijzigd door Mr. HTTP op 07-02-2021 15:50]


  • marcel19
  • Registratie: September 2012
  • Laatst online: 06:45
pjottum schreef op zondag 7 februari 2021 @ 15:35:
Ik zou hem vandaag ook even uitvoeren, maar dan met de hand, zie je wat er gebeurd :)

Ff kijken waar zijn we:

code:
1
2
3
4
5
6
7
8
#/bin/bash
bestand=$(date +"Werkzaamheden_%d_%m_%y.txt")
oudbestand=$(date -d '-1 day' +"Werkzaamheden_%d_%m_%y.txt")
demap=/opslaan/in/deze/map

[ -f ${demap}/$oudbestand} ] && rm ${demap}/$oudbestand} || echo "oh, dat is jammer, die is er niet"

wget -o /dev/null mijn.web.server/${bestand} -P $(demap}


Uitgevoerd en werkt nu precies zoals ik wil >:)


[...]


Je lijkt een klant.
Elke keer de specs aanpassen.

:) :)

Bijzonder werk ook wel trouwens?

  • pjottum
  • Registratie: Mei 2000
  • Laatst online: 11:07

pjottum

¯\_(ツ)_/¯

marcel19 schreef op zondag 7 februari 2021 @ 15:43:
[...]


Dat dacht ik eerst ook.
Maar misschien handig om toch iets van een back-up te hebben in een sub folder :)
Verder moet je het nu zelf maar uitpuzzelen, ipv een rm kan je een mv doen.

Als je nog verder gaat, ga je van te voeren controleren of de doeldirectories bestaan, en of je niet per ongeluk iets overschrijft, of de site niet een 404 geeft, etc. :)

Ach, vooruit, ik kan toch de sneeuw niet in en SSCs zijn vervelend.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#/bin/bash
bestand=$(date +"Werkzaamheden_%d_%m_%y.txt")
oudbestand=$(date -d '-1 day' +"Werkzaamheden_%d_%m_%y.txt")
demap=/opslaan/in/deze/map
backupmap=$demap/backup
hoeveeldagen=7

# maak demap
if [ -f ${demap} ] ; then
  [ -f ${backupmap} ] || mkdir ${backupmap}
else
  mkdir -p ${backupmap}
fi

# bewaar het bestand
[ -f ${demap}/$oudbestand} ] && mv ${backupmap}/$oudbestand} || echo "oh, dat is jammer, die is er niet"

# ruim oude bestanden op
find ${backupmap} -type f -mtime +${hoeveeldagen} -exec rm -f {} \;

# haal het nieuwe bestand
wget -o /dev/null mijn.web.server/${bestand} -P $(demap}


Volstrekt ongetest trouwens dus ik zou dat toch even doen, vooral die find -exec rm :)

Oh, en ik hou van oneliners - het kan altijd korter dan dit.

[Voor 47% gewijzigd door pjottum op 07-02-2021 15:54]

ping 127.212.23.124

Pagina: 1


Tweakers maakt gebruik van cookies

Tweakers plaatst functionele en analytische cookies voor het functioneren van de website en het verbeteren van de website-ervaring. Deze cookies zijn noodzakelijk. Om op Tweakers relevantere advertenties te tonen en om ingesloten content van derden te tonen (bijvoorbeeld video's), vragen we je toestemming. Via ingesloten content kunnen derde partijen diensten leveren en verbeteren, bezoekersstatistieken bijhouden, gepersonaliseerde content tonen, gerichte advertenties tonen en gebruikersprofielen opbouwen. Hiervoor worden apparaatgegevens, IP-adres, geolocatie en surfgedrag vastgelegd.

Meer informatie vind je in ons cookiebeleid.

Sluiten

Toestemming beheren

Hieronder kun je per doeleinde of partij toestemming geven of intrekken. Meer informatie vind je in ons cookiebeleid.

Functioneel en analytisch

Deze cookies zijn noodzakelijk voor het functioneren van de website en het verbeteren van de website-ervaring. Klik op het informatie-icoon voor meer informatie. Meer details

janee

    Relevantere advertenties

    Dit beperkt het aantal keer dat dezelfde advertentie getoond wordt (frequency capping) en maakt het mogelijk om binnen Tweakers contextuele advertenties te tonen op basis van pagina's die je hebt bezocht. Meer details

    Tweakers genereert een willekeurige unieke code als identifier. Deze data wordt niet gedeeld met adverteerders of andere derde partijen en je kunt niet buiten Tweakers gevolgd worden. Indien je bent ingelogd, wordt deze identifier gekoppeld aan je account. Indien je niet bent ingelogd, wordt deze identifier gekoppeld aan je sessie die maximaal 4 maanden actief blijft. Je kunt deze toestemming te allen tijde intrekken.

    Ingesloten content van derden

    Deze cookies kunnen door derde partijen geplaatst worden via ingesloten content. Klik op het informatie-icoon voor meer informatie over de verwerkingsdoeleinden. Meer details

    janee