2012-04-03 6 views
1

Ich schrieb ein Shell-Skript, das ein Dokument herunterlädt.Shell-Skript mit wget, um Datum minus 1-Tag zu erhalten

cd Desktop/Reports/folder/ 

wget http://www.mywebpage.com/data/reports/2012_04_02_data.xls 

echo "data downloaded." 

Der schwierige Teil ist, dass das Dokument Ich möchte laden (2012_04_02_data.xls) für den Vortag datiert. Also muss ich die Daten der vorherigen Tage herunterladen, nicht den aktuellen Tag.

Mein Ziel ist es, das Shell-Skript auszuführen, ohne den Kalendertag jeden Morgen erhöhen zu müssen. Stattdessen nimmt die Shell den aktuellen Tag und subtrahiert einen Kalendertag und lädt dann dieses Datum in die URL.

Danke für die Hilfe!

+0

Sehr hilfreich. Dank euch allen! – user12764

Antwort

7

Wie wäre:

wget "http://www.mywebpage.com/data/reports/$(date -d yesterday +%Y_%m_%d)_data.xls" 

Dies sollte für GNU coreutils arbeiten, die auf dem Linux-Tag basiert Ich vermute, Sie haben.

1

Der schwierigere Teil ist, wenn Sie aus Tagen behandeln müssen. Normalerweise wette ich den Link, der die Seite enthält, und grep dann das Datum aus dem Attribut href. Übergeben Sie die Zeichenfolge dann an Ihren "echten" Befehl wget.

2

können Sie den date Befehl

$ wget "http://www.mywebpage.com/data/reports/$(date -d yesterday +'%Y_%m_%d')_data.xls" 
1

Sie markiert diese mit perl, so ist hier, wie ich es mit Perl tun würde. Das bedeutet nicht, ich glaube, Sie Perl obwohl verwenden sollten:

use v5.10.1; 

use DateTime; 
use Mojo::UserAgent; 

chdir 'Desktop/Reports/folder' or die "Could not chdir: $!"; 

my $date = DateTime->now->subtract(days => 1)->ymd('_'); 
my $url = sprintf 
    "http://www.mywebpage.com/data/reports/%s_data.xls", 
    $date; 

my $data = Mojo::UserAgent->new->get($url)->res->body; 

Sie können mit dem User-Agent zu speichern Brocken in eine Datei mehr fancy stuff zu tun, wie es in und viele andere Dinge geht, die Sie tun möchten vielleicht, aber Sie müssen diese Teile selbst ausfüllen.