Wie lade ich die neueste Datei in einem Ordner mit einem scp herunter?


10

Ich möchte eine scp-Übertragung ausführen, um die neueste (neueste) Datei in einem bestimmten Verzeichnis in mein lokales Verzeichnis herunterzuladen.

Etwas wie das:

  • Quelle :root@rimmer.sk:/home/rimmer/backups/
  • Ziel :/home/rimmer/backups/

Während nur die neueste Datei abgerufen wird, nicht alle backups.

Antworten:


12

Angenommen, Sie haben Variablen serverund dirdefiniert, können Sie tun

$ dir="~"
$ server="user@server.com"
$ scp $server:$dir/$(ssh $server 'ls -t $dir | head -1') .

Wo Sie zuerst nach der neuesten Datei suchen und sie dann kopieren.

Hinweis: Ich habe es nicht auf Narrensicherheit überprüft (z. B. ist der letzte Eintrag ein Ordner).


Wenn es ein Verzeichnis ist, das nichts scp. Sie müssen verwenden scp -r.
slm

@slm Richtig, aber er möchte das vielleicht nicht kopieren.
Bernhard

Wenn das scpGet unterbrochen wird, muss das Kopieren von Anfang an neu gestartet werden. Es rsynckann dort fortgesetzt werden, wo es aufgehört hat.
slm

Für bash musste ich die einfachen Anführungszeichen im Argument an durch doppelte Anführungszeichen ersetzen ssh.
Johannes Bittner

1
Sie können das erste $ dir entfernen, indem Sie folgende Schritte ausführen ( /*am Ende des zweiten $ dir ein a hinzufügen ):scp $server:$(ssh $server 'ls -t $dir/* | head -1') .
Jesse

1

scpist dumm in dem Sinne, dass es Dateien nur blind von der Quelle zum Ziel kopiert. Wenn Sie etwas intelligenteres beim Kopieren von Dateien wünschen, müssen Sie ein Tool wie verwenden rsync.

$ rsync -avz root@rimmer.sk:'$(find /home/rimmer/backups/ -ctime -1)' /home/rimmer/backups/

Dadurch werden nur Dateien kopiert, die fehlen oder am letzten Tag aus dem Sicherungsverzeichnis von rimmer.sk (-ctime -1) in das Verzeichnis Ihrer lokalen Sicherung geändert wurden.

-ctime n
   File's  status  was last changed n*24 hours ago.  See the comments for 
   -atime to understand how rounding affects the interpretation of file 
   status change times.

Verweise


Das Problem mit rsync ist das gleiche. Wenn ich 2 Tage offline war, versucht es, alle Backups aller Tage zu kopieren, was ich überhaupt nicht brauche und riesig ist.
Richard Rodriguez

@RichardRodriguez - OK, bitte aktualisieren Sie Ihre Frage und geben Sie genauer an, wonach Sie suchen.
slm

2
@slm: Ich denke, die Frage ist in Ordnung so wie sie ist. Ich möchte nur die neueste Datei in einem Verzeichnis herunterladen. Was kann ich noch darüber erklären? :)
Richard Rodriguez

@RichardRodriguez - Welche Dateien befinden sich in diesem Verzeichnis? Eine Beispielliste wäre hilfreich.
slm

1
Warum die Abwahl?
slm

0

Ein bisschen spät zur Party, aber vielleicht funktioniert eine Lösung mit ssh und rsync für einige:

source_host="yourhost.com"
source_dir="/a/dir/on/yourhost.com/"
target_dir="/the/dir/where/last_backup/will/be/placed"
last_backup=$(ssh user@${source_host} "ls -t ${source_dir} | head -1")
if [ "${last_backup}" == "" ]; then
    echo "ERROR: didn't find a backup, cannot continue!"
else
    echo "the last backup is: ${last_backup}"
    rsync -avzh user@${source_host}:${source_dir}/${last_backup} ${target_dir}
fi
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.