Wie kopiere ich alle Dateien mit scp aus einem Verzeichnis in ein Remote-Verzeichnis?

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 implementierte scp " 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

Antwort

Führen Sie die folgenden Schritte aus:

  1. Verzeichnis kopieren local_dir mit all seinen Unterverzeichnissen:

    scp -r ~/local_dir [email protected] /var/www/html/target_dir 
  2. kopiert nur den Inhalt von local_dir und nicht das Verzeichnis local_dir selbst:

    scp -r ~/local_dir/* [email protected] /var/www/html/target_dir 
  3. 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

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.