Shell-Skript, das die Datei überträgt, wobei das Datum von till(Nov1) bis to(Dec1) aus dem Namen übernommen wird

Shell-Skript, das die Datei überträgt, wobei das Datum von till(Nov1) bis to(Dec1) aus dem Namen übernommen wird

Okay, dieses Shell-Skript klingt vielleicht kompliziert, aber ich weiß nicht, wie ich das erreichen soll.

hier ist also die Anforderung.

Bildbeschreibung hier eingeben

Beachten Sie bitte die oben genannten Dateien.

Die Dateinamen lauten wie folgt.

Meter_20200120100846.xls
Meter_20200121100846.xls
Meter_20200122100846.xls
Meter_20200123100846.xls
Meter_20200124100846.xls
Meter_20200125100846.xls

Ich möchte also ein solches Skript erstellen, das diese Dateien auf einen anderen Server kopiert. Aber dabei ist der Haken: Die Zahl am Ende ist das Datum dieser Datei. 20200120 in Datei 1 bedeutet also, dass sie am 20.01.2020 erstellt wurde.

also im Grunde möchte ich ein solches Skript erstellen, das die Eingabe als 20/01/2020 oder 20200120 akzeptiertZu25.01.2020 oder 25.01.2020 und kopieren Sie alle Dateien auf einen anderen Server mit demselben Namen.

Ich kann alles verwenden, um scp, sftp oder rsync im Befehl zu kopieren.

Grundsätzlich wird ein solches Skript erstellt, das vom Datum bis zum Enddatum alle Dateien auf einen anderen Server kopiert.

Ehrlich gesagt weiß ich nicht, ob das überhaupt möglich ist.

aber Leute, wenn ihr eine solche Lösung kennt, würde mir das wirklich helfen.

Danke und Grüße, Sagar Mandal

Antwort1

Wenn ich dich richtig verstehe:

# Here you set the range of dates
from="20200121" 
to="20200125"
for f in *.xls; do 
  [[ $(date -d "${f:6:8}" +%s) -ge $(date -d "$from" +%s) ]] &&
  [[ $(date -d "${f:6:8}" +%s) -le $(date -d "$to" +%s) ]] &&
  echo "$f in range" || # Here your actions
  echo "$f not in range" 
done

Ausgabe:

Meter_20200120100846.xls not in range
Meter_20200121100846.xls in range
Meter_20200122100846.xls in range
Meter_20200123100846.xls in range
Meter_20200124100846.xls in range
Meter_20200125100846.xls in range

Antwort2

Datumsbefehl ist das, wonach Sie suchen

$ date -d 1/25/2020 +%Y%m%d
20200125

-d mm/dd/yyyy - Übergeben Sie dem Befehl das Eingabedatum.

+%Y%m%d - was Ihre Ausgabe sein soll.

  • %Y - Jahr vierstellig
  • %m - Monat zweistellig
  • %d - Datum des Monats in zwei Ziffern.

verwandte Informationen