SCP nur neueste Datei

0

Ich möchte nur die neueste Datei mit SCP aus einem Remote-Ordner herunterladen. Die Dateien haben ein Format raw_201712282131.ubx wobei die Nummer das Datum der Datei ist.

Wenn ich diesen Befehl in SSH mache, kann ich den neuesten Dateinamen erhalten:

find -name '*.ubx' | sort -V | tail -1

Wie kann ich nur die neueste Datei mit SCP herunterladen?

bakalolo
quelle

Antworten:

1

Sie können dies ausprobieren und sehen, ob es funktioniert. Es funktioniert gut für mich unter macOS, wenn ich zu verschiedenen Linux-Servern (CentOS, Ubuntu usw.) gehe:

RECENT=$(ssh [email protected] ls -lrt /remote/path/ | awk '/.ubx/ { f=$NF }; END { print f }');
scp [email protected]:/remote/path/${RECENT} /local/path/${RECENT};

Die erste Zeile erhält die neueste Datei mit der Erweiterung von .ubx und ordnet es dem zu $RECENT Variable.

Die nächste Zeile führt dann einfach den SCP-Befehl selbst aus. Sie können es zu einem "One-Liner" machen, indem Sie einfach beide Zeilen zu einer dieser Zeilen kombinieren:

RECENT=$(ssh [email protected] ls -lrt /remote/path/ | awk '/.ubx/ { f=$NF }; END { print f }'); scp [email protected]:/remote/path/${RECENT} /local/path/${RECENT};

Und natürlich können Sie einfach Variablen für den Benutzer, den Hostnamen, /remote/path/ und /local/path/ und platzieren Sie es einfach in einer Bash-Skriptdatei, um es mit einem Befehl auszuführen get_latest_ubx.sh Sie müssen also nicht jedes Mal einen Befehl wie diesen eingeben, wenn Sie ihn verwenden müssen.

#!/bin/bash

# Assign the variables.
USER='someone';
HOST='example.com';
LOCAL_PATH='/local/path/';
REMOTE_PATH='/remote/path/';

# Get the most recent `.ubx` file and assign it to `RECENT`.
RECENT=$(ssh ${USER}@${HOST} ls -lrt ${REMOTE_PATH} | awk '/.ubx/ { f=$NF }; END { print f }');

# Run the actual SCP command.
scp ${USER}@${HOST}:${REMOTE_PATH}${RECENT} ${LOCAL_PATH}${RECENT};
JakeGould
quelle
Es stellte sich heraus, dass ich nicht die neueste Datei ändern musste.
bakalolo
@bakalolo Nun, wenn diese Antwort Ihnen irgendwie geholfen hat, seien Sie sicher, sie zu bestätigen. Und wenn es die Antwort ist, die Ihr Problem gelöst hat, markieren Sie es bitte als solche.
JakeGould