Frage

Von Zeit zu Zeit, wie ich Dateien im Verzeichnis / tmp von meinem Webserver löscht zu teilen. Was ärgerlich ist, ist, dass ich die Berechtigungen festlegen müssen, wenn ich die Dateien scp. Im Anschluss an die Beratung von eine andere Frage ich ein Skript geschrieben haben, die kopiert die Datei über, setzt die Berechtigungen und druckt dann die URL:

#!/bin/bash

scp "$1" SERVER:"/var/www/tmp/$1"
ssh SERVER chmod 644 "/var/www/tmp/$1"
echo "URL is: http://SERVER/tmp/$1"

Wenn ich ersetzen SERVER mit meinem eigentlichen Host, funktioniert alles wie erwartet ... bis ich das Skript mit einem Argument, einschließlich Leerzeichen auszuführen. Obwohl ich die Lösung vermuten, wie $ verwenden könnte sein, @ Ich habe noch nicht heraus einen Abstand Dateinamen zur Arbeit kommen.

War es hilfreich?

Lösung

Es stellt sich heraus, dass das, was benötigt wird, ist der Weg zu entkommen, die auf den Remote-Server gesendet werden. Bash denkt die Zitate in SERVER: "/ var / www / tmp / 1 $" bezieht sich auf den $ 1 und entfernt sie aus der endgültigen Ausgabe. Wenn ich versuche zu laufen:

tmp-scp.sh Screen\ shot\ 2010-02-18\ at\ 9.38.35\ AM.png

In Anlehnung sehen wir es versucht, auszuführen:

scp SERVER:/var/www/tmp/Screen shot 2010-02-18 at 9.38.35 AM.png

Wenn stattdessen die Anführungszeichen sind entkam Literale dann die scp-Befehl sieht mehr wie man erwarten würde:

scp SERVER:"/var/www/tmp/Screen shot 2010-02-18 at 9.38.35 AM.png"

Mit dem Zusatz von einigen Code den Weg abzuschneiden, das endgültige Skript wird:

#!/bin/bash

# strip path
filename=${1##*/}
fullpath="$1"

scp "$fullpath" SERVER:\"/var/www/tmp/"$filename"\"
echo SERVER:\"/var/www/tmp/"$filename"\"
ssh SERVER chmod 644 \"/var/www/tmp/"$filename"\"
echo "URL is: http://SERVER/tmp/$filename"

Andere Tipps

Das Skript sieht richtig. Meine Vermutung ist, dass Sie die Dateinamen zitieren, wenn Sie es in Ihr Skript übergeben:

scp-chmod.sh "filename with spaces"

oder die Flucht der Räume:

scp-chmod.sh filename\ with\ spaces

der einfachere Weg über Leerzeichen in Dateinamen, ohne sich Gedanken, (außer unter Angabe) ist Ihre Dateien umbenennen loswerden Räume zu erhalten, bevor die Übertragung. Oder wenn Sie die Dateien erstellen, verwenden Sie keine Leerzeichen. Sie können dies Ihre „best practice“ machen, wenn Sie Ihre Dateien nennen.

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