Mit Ruby und SCP / SSH, wie Sie feststellen, ob eine Datei vorhanden ist, bevor eine Kopie Hochladen

StackOverflow https://stackoverflow.com/questions/1625693

  •  06-07-2019
  •  | 
  •  

Frage

Ich bin eine Datei auf einen Remote-Server zu SCP verwenden, aber was ist die richtige Art und Weise zu sehen, ob die Datei existiert, bevor Sie so?

War es hilfreich?

Lösung

Beachten Sie beim Check-dann-Upload: nicht atomar ist und kann zu Race Conditions (oder TOCTOU Anfälligkeiten) führen

.

Ein besserer Weg nach vorne konnte die Dateiberechtigungen auf die hochgeladene Datei zu setzen, so dass es nicht beschreibbar (400 oder 444 oder ähnliches auf UNIX-ähnlichen Systemen), dann alle nachfolgenden Uploads auf dem gleichen Dateinamen wird einfach fehlschlagen. (Sie werden zurückkommen „Zugriff verweigert“, die zu einer kleinen Interpretation unterworfen werden kann (zB haben die Upload-Verzeichnis Berechtigungen ändern?). Das ist ein Nachteil dieser Methode).

Wie stellen Sie die Berechtigungen für die Remote-Datei? Der einfachste Weg, das zu tun ist, sie auf der lokalen Datei zu setzen und sich dann erhalten, wenn Sie den Upload tun. Ruby Net :: SCP README sagt, dass es in der Tat „Dateiattribute über Transfers bewahren“.

Andere Tipps

Sie können dies nicht mit scp. Allerdings können Sie es mit SFTP tun. Es würde wie folgt aussehen:

require 'net/sftp'

remote_path = "/path/to/remote/file"
Net::SFTP.start('host', 'username', :password => 'password') do |sftp|
  sftp.stat!(remote_path) do |response|
    unless response.ok?
    sftp.upload!("/path/to/local/file", remote_path)
  end
end

Dies löst definitiv Ihre Frage und werden auch zusätzliche Informationen geben. http://ruby.about.com/od/ssh/ss/netscp.htm

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top