Ich versuche, während einer SFTP-Verbindung einen Dateinamen mit einem String abzugleichen, der im Grunde genommen ein Zeitstempel ist.
Wie kann ich einen Teil des Dateinamens abgleichen? Ich kann keine Variable innerhalb einer SFTP-Verbindung deklarieren. Und ich kann auch keine zuvor in Bash erstellte Variable aufrufen.
Edit: Dinge, die ich versucht habe
yr=$(date + "%Y")
sftp -i key.pem un@server
sftp> echo $yr
Invalid command.
sftp> $yr
Invalid command.
neue Schale
sftp -i key.pem un@server
sftp> test=$(date +"%Y")
Invalid command.
Versuchte diese 2
bash
shell-script
sftp
variable
einfachcodieren
quelle
quelle
expect
- das sollte das Geschäft für Sie erledigenexpect
, muss ich wahrscheinlich ein paarexpect
undsend
Zeilen machen, oder? Oder kann ich nurexpect
einmal für den Zeitstempel verwenden?Antworten:
Das
sftp
Programm ist eine eigene Sache; Es ist völlig unabhängig von und unabhängig vonbash
, das den Wert seiner Variablen kennt und expandieren würde$yr
. Im Allgemeinen können Sie keine bash-Variablen ohne anwendungsspezifische Kommunikationsmethoden an solche externen Programme übergeben.Wenn Sie nur eine Datei mit
$yr
dem Dateinamen hochladen oder herunterladen möchten , können Siescp
stattdessen Folgendes verwenden:zum Download oder
zum Hochladen.
Wenn Sie aus irgendeinem Grund eine
sftp
bestimmte Verwendung wirklich benötigen , können Sie dynamisch eine Batch-Datei erstellen, zquelle
scp
aber es ist auf dem Server nicht erlaubt. Ich schaue inexpect
den Momentexpect
kann viel, aber es ist im Grunde genommen ein Hack, der verwendet wird, um Skripte für Programme zu erstellen, die nicht für Skripte geeignet sind. Wenn Sie eine andere Methode verwenden können, z. B. die-b
Option zu SFTP, ist es in der Regel einfacher. (In Klammern, wie ist Ihr Server eingerichtet, dass SFTP erlaubt ist, aber SCP nicht?)scp
das nicht erlaubt ist. Könnten Sie erklären, was aht-b
tun würde? Mit Blick auf documenation, seine Wirkung ist , dass sie benachrichtigt werden, wenn Jobs im Hintergrund laufen beendensftp
ist ein eigenständiges Programm, nicht Teil der Shell. Die Shell-Syntax wird nicht verstanden. Es verfügt nicht über Funktionen wie Variablenerweiterungen und bedingte Anweisungen.Der einfachste Weg, komplexe Dinge über SFTP zu erledigen, ist die Verwendung von SSHFS . SSHFS ist ein Dateisystem, das SFTP verwendet, um ein entferntes Dateisystem als lokales Dateisystem anzuzeigen. Auf dem Client benötigt SSHFS FUSE , das auf den meisten modernen Unices verfügbar ist. Auf dem Server erfordert SSHFS SFTP. Wenn der Server SFTP zulässt, können Sie SSHFS damit verwenden.
quelle