Cookies op Tweakers

Tweakers is onderdeel van DPG Media en maakt gebruik van cookies, JavaScript en vergelijkbare technologie om je onder andere een optimale gebruikerservaring te bieden. Ook kan Tweakers hierdoor het gedrag van bezoekers vastleggen en analyseren. Door gebruik te maken van deze website, of door op 'Cookies accepteren' te klikken, geef je toestemming voor het gebruik van cookies. Wil je meer informatie over cookies en hoe ze worden gebruikt? Bekijk dan ons cookiebeleid.

Meer informatie
Toon posts:

Automatisch elke dag een txt bestand ophalen.

Pagina: 1
Acties:

Vraag


  • marcel19
  • Registratie: september 2012
  • Laatst online: 11-06 12:00
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: 23:20
nvm

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


  • pjottum
  • Registratie: mei 2000
  • Laatst online: 16:03

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: 02-06 16:47
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]

Check mijn aanbod in V&A


  • marcel19
  • Registratie: september 2012
  • Laatst online: 11-06 12:00
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: 02-06 16:47
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]

Check mijn aanbod in V&A


  • EvH
  • Registratie: juli 2014
  • Laatst online: 21:00
%Y —> %y

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


  • marcel19
  • Registratie: september 2012
  • Laatst online: 11-06 12:00
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: 02-06 16:47
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

Check mijn aanbod in V&A


  • marcel19
  • Registratie: september 2012
  • Laatst online: 11-06 12:00
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: 11-06 12:00
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: 02-06 16:47
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...

Check mijn aanbod in V&A


  • pjottum
  • Registratie: mei 2000
  • Laatst online: 16:03

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: 02-06 16:47
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

Check mijn aanbod in V&A


  • Mr. HTTP
  • Registratie: november 2020
  • Laatst online: 02-06 16:47
pjottum schreef op zondag 7 februari 2021 @ 15:35:
Je lijkt een klant.
Elke keer de specs aanpassen.
_O-

Check mijn aanbod in V&A


  • marcel19
  • Registratie: september 2012
  • Laatst online: 11-06 12:00
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: 02-06 16:47
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]

Check mijn aanbod in V&A


  • marcel19
  • Registratie: september 2012
  • Laatst online: 11-06 12:00
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: 16:03

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


Apple iPad Pro (2021) 11" Wi-Fi, 8GB ram Microsoft Xbox Series X LG CX Google Pixel 5a 5G Sony XH90 / XH92 Samsung Galaxy S21 5G Sony PlayStation 5 Nintendo Switch Lite

Tweakers vormt samen met Hardware Info, AutoTrack, Gaspedaal.nl, Nationale Vacaturebank, Intermediair en Independer DPG Online Services B.V.
Alle rechten voorbehouden © 1998 - 2021 Hosting door True