Mein Ziel ist es, nur alle Dateien von zu kopieren ~ / local_dir an [email protected] / var / www / html / target_dir mit scp und erstellen Sie keine local_dir-Kategorie in local_dir.
/var/www/html/target_dir/files..
aber nicht
/var/www/html/target_dir/local_dir/files..
bei Verwendung des Parameters -r
Kommentare
- Tut
scp * [email protected]:/var/www/html/target_dir
nicht das, was Sie wollen? Wenn ja, bitte bearbeiten mit detaillierteren Informationen darüber, was Sie ' versuchen & haben es bisher versucht. - Anhängen /. ist nicht mehr Arbeit. Mehr hier
Antwort
scp hat das Argument -r. Versuchen Sie also Folgendes:
$ scp -r ~/local_dir [email protected]:/var/www/html/target_dir
Das Argument -r funktioniert genau wie das Argument -r in cp. Es überträgt Ihren gesamten Ordner sowie alle Dateien und Unterverzeichnisse innen.
Kommentare
- Ihr Befehl hat das Verzeichnis
local_dir
in / var / www / html / target_dir erstellt Mein Ziel ist es, nur Dateien zu kopieren. - Entschuldigung, ich habe es falsch verstanden. Wiederholen Sie dann einfach den Befehl, aber wie folgt:
$ scp -r ~/local_dir [email protected]:/var/www/html/
Benennen Sie dann bei Bedarf ein neues Verzeichnis um. - Oder
$ scp -r ~/local_dir/* [email protected]:/var/www/html/target_dir
Was auch immer schwimmt Ihr Boot. - Ändern Sie den Platzhalter
*
in einen Punkt.
und Sie ' kopiert den Verzeichnisinhalt (einschließlich aller Punktdateien), ohne das Verzeichnis selbst zu kopieren.scp -pr ~/local_dir/. [email protected]:/path/to/target_dir
- Leider wurde die Verwendung von
.
durch eine schlecht implementiertescp
" Bugfix " (siehe < superuser.com/questions/1403473/scp-error-unexpected-filename/… ).rsync
wäre eine funktionierende Alternative.
Antwort
If Ihr Ziel ist es, alle Dateien von local_dir
zu übertragen. Der Platzhalter *
erledigt den Trick:
$ scp ~/local_dir/* [email protected]:/var/www/html/target_dir
Die Option -r
bedeutet „rekursiv“. Sie müssen sie also schreiben, wenn Sie versuchen, ein gesamtes Verzeichnis oder mehrere Verzeichnisse zu übertragen.
Von man scp
:
-r Recursively copy entire directories. Note that scp follows symbolic links encountered in the tree traversal.
Wenn Sie also Unterverzeichnisse in , das letzte Beispiel überträgt nur Dateien. Wenn Sie jedoch die Option -r
festlegen, werden Dateien und Verzeichnisse übertragen.
Kommentare
- 1+ Weil Sie die Kommentare in der akzeptierten Antwort lesen müssen, um zur richtigen Antwort zu gelangen, während diese nur direkt erklärt wird.
Antwort
Anhängen von /.
an Ihr Quellverzeichnis überträgt seinen Inhalt anstelle des Verzeichnisses selbst. Im Gegensatz zur Wildcard-Lösung umfasst dies auch alle versteckten Dateien.
$ scp -r ~/local_dir/. [email protected]:/var/www/html/target_dir
Die Gutschrift für diese Lösung geht an roaima, aber ich dachte, sie sollte als veröffentlicht werden eine tatsächliche Antwort, nicht nur ein Kommentar.
Kommentare
- Leider wurde diese Lösung durch eine schlecht implementierte " Bugfix " (siehe < superuser.com/questions/1403473/scp-error-unexpected-filename/… ).
Antwort
Führen Sie die folgenden Schritte aus:
-
Verzeichnis kopieren
local_dir
mit all seinen Unterverzeichnissen:scp -r ~/local_dir [email protected] /var/www/html/target_dir
-
kopiert nur den Inhalt von
local_dir
und nicht das Verzeichnislocal_dir
selbst:scp -r ~/local_dir/* [email protected] /var/www/html/target_dir
-
Nicht verwenden:
scp -r ~/local_dir/. [email protected] /var/www/html/target_dir
as Es wird ein Fehler ausgegeben (gerade getestet und der folgende Fehler empfangen):scp: error: unexpected filename: .
Kommentare
- Ich erhalte auch den Fehler eines unerwarteten Dateinamens. Die Verwendung des Platzhalters funktioniert jedoch auch nicht, da das Verzeichnis so viele Dateien enthält, dass die Zeichenbeschränkung für Befehle überschritten wird, wenn der Platzhalter erweitert wird. macOS
- @RichardKiefer: Sie können Platzhalter wie verwenden? mit *, um die Suchergebnisse weiter zu isolieren und dann an scp zu übergeben. Versuchen Sie diesen Link, es kann hilfreich sein: Platzhalter
- Vielen Dank, Syed, aber mein Punkt war, dass ich tatsächlich alle Elemente im Ordner als Ziel haben möchte und keine filtern. Und wenn mein Verzeichnis zu viele enthält, funktioniert der Platzhalter einfach nicht.
- @RichardKiefer: Ich entschuldige mich, Richard, um alle Dateien kopieren zu lassen, können wir ein kleines Bash-Skript verwenden. Verwenden Sie:
ls -l | awk '{print $9}'
und leiten Sie die gesamte Ausgabe (dies wären alle Dateinamen) in eine txt-Datei um. Lesen Sie die txt-Datei zeilenweise und kopieren Sie die Dateien mit dieser Eingabe mit scp:input=/home/user/filename.txt while IFS= read -r line