2017-09-19 1 views
0

Derzeit verwende ich den folgenden Befehl, um ein komplettes Verzeichnis von einem SFTP-Server auf unseren eigenen zu downloaden. Das Problem ist, dass dieses Verzeichnis jeden Tag größer wird und die meisten Dateien darin nicht notwendig sind. Also, was ich heute mache ist, dass ich den gesamten Ordner herunterlade und dann die überflüssigen säubere.Holen Sie sich die neueste Version einer Gruppe von Dateien mit ähnlichem Namen mit der Get-Anweisung zum Download

Aber unsere Kunden genießen diese Lösung nicht, weil sie zu schweren Dateiübertragungen führt (für die sie bezahlen).

Die aktuelle Version:

sshpass -p $FTP_PASS sftp -o StrictHostKeyChecking=no -o HostKeyAlgorithms=+ssh-dss [USERNAME]@[SFTP_DOMAIN].com <<EOF 

get -r Export 
EOF 

Ich mag auf diesem Skript verbessern, so dass stattdessen die gesamten Ordner herunterzuladen, wird das Skript nach Dateien sucht, die mit einer bestimmten Zeichenfolge beginnen und nur dann erhalten, die neuesten Version von ihnen.

z.

Wir sind für die neuesten Versionen von denen suchen, die entweder mit Subscribers_Extracts oder Clicks oder Account_Extract und wir haben die folgende Liste in dem Verzeichnis zu starten:

Subscribers_Extracts_1.csv 
Subscribers_Extracts_2.csv 
Subscribers_Extracts_3.csv 
Subscribers_Extracts_4.csv (latest modified) 
Clicks_ftyftyf.csv 
Clicks_67546754675.csv (latest modified) 
Clicks_783635ghgh.csv 
Account_Extract_uguyfuyfuf.csv 

dann die Dateien sollten wir herunterladen werden gehen

Subscribers_Extracts_4.csv 
Clicks_67546754675.csv 
Account_Extract.csv 

Beachten Sie, dass wir die Dateien basierend auf dem Änderungsdatum und nicht die Zahlen auf ihren Namen ausgewählt haben.

Beachten Sie auch, dass der letzte Typ aka Account_Extract.csv die einzige Datei ist, die das dritte Muster entspricht, so dass wir das unabhängig von seinem Änderungsdatum erhalten.

Wie kann ich meinem Kunden viel Datentransfer ersparen?

+0

Wenn Sie Kopieren immer von der gleichen Quelle auf das gleiche Ziel, es lohnt sich, zu ['rsync'] (https://ss64.com/bash/rsync.html) –

+0

https://serverfault.com/questions/538767 zu wechseln/how-to-rsync-files-folders-from-a-specific-date-forward –

+0

funktioniert aber 'rsync' auf SSHPASS und SFTP Servern? – Disasterkid

Antwort

0

rsync können Dateien synchronisieren auf der letzten vorgegebenen Zeit geändert, aber für etwas flexibler können Sie das Datum der letzten Änderung prüfen (in Sekunden) einer Datei mit:

date +%s -r filename

Dann implementieren die check in eine Schleife für jeden Dateinamen root (dh Überprüfung für jede f in Subscribers_Extract*), Speichern des Dateinamens, für den das Datum höher ist.

Allerdings funktioniert date -r nicht auf OS X-Systemen.

EDITED

Wenn Sie in dem Remote-Server ssh und Bash-Skript ausführen, das den Namen des neuesten gibt „Abonnenten _...“ geändert, die Sie kopieren können:

#!/bin/bash 
list="$(ls Subscribers_Extract*)" 
names=($list) 
nr_names=${#names[@]} 
date_modify=0 
file_to_copy="none" 
for i in `seq 0 $((nr_names - 1))` 
do date_tmp=`date +%s -r ${names[$i]}` 
if (($date_tmp>$date_modify)) 
then 
date_modify=$date_tmp 
file_to_copy=${names[$i]} 
fi 
done 
echo $file_to_copy 
+0

ist es ein Ubuntu. kannst du mir mit dem Code auf dem oben angegebenen Beispiel helfen? – Disasterkid

+0

Können Sie ssh Shell verwenden? –

+0

Ich habe nur über PuTTY Zugriff auf die Ubuntu-Shell. – Disasterkid

Verwandte Themen