Wie kann ich scp dazu bringen, versteckte Dateien zu kopieren?


63

Ich benutze oft SCP, um Dateien zu kopieren - insbesondere webbezogene Dateien. Das Problem ist, dass ich immer dann, wenn ich das mache, meinen Befehl zum Kopieren versteckter Dateien (z. B. .htaccess) nicht bekommen kann.

Normalerweise rufe ich Folgendes auf:

scp -rp src/ user@server:dest/

Dies kopiert keine versteckten Dateien. Ich möchte das nicht noch einmal aufrufen müssen (indem ich so etwas mache scp -rp src/.* ...- und das hat sowieso seltsame .und ..Implikationen.

Ich habe in der scpManpage nichts über "versteckte Dateien einschließen" gesehen.

Wie kann ich das erreichen?


Ich nehme an, dass sich src/.*auch src/..das übergeordnete Verzeichnis kopiert , oder?
Ken Sharp

Antworten:


67

Das sollte unbedingt zu versteckten Dateien passen. Das / am Ende der Quelle sagt "jede Datei in diesem Verzeichnis". Trotzdem belegen Sie Tests und Recherchen. Das ist dummes Verhalten.

Die " Antwort " besteht darin, einen Punkt an das Ende der Quelle anzuhängen:

scp -rp src/. user@server:dest/

Die eigentliche Antwort ist die Verwendung von rsync.


Netter Trick das habe ich noch nicht gemerkt.
cstamas

21
rsync -avz -e ssh --progress src / benutzer @ server: dest /
MikeyB

2
Ich kann dieses Verhalten nicht reproduzieren. scp -r source/ host:source2kopiert Punktdateien. Funktioniert in OpenSSH 5.1 ab 2007.
Mikel

3
Beachten Sie, dass das Hinzufügen eines .am Ende (2019) aus Sicherheitsgründen nicht mehr funktioniert. Dies wird hier erklärt: superuser.com/questions/1403473/scp-error-unexpected-filename
Stéphane

25

Sie können rsync ausprobieren. Es ist besser für diesen Job geeignet:

rsync -av src / user @ server: dest /

(Und die Handbuchseite ist lesenswert.)


2
Ich verwende immer die Option --progress für rsync. Ohne sie kann ich nicht leben. = D
Hofa

1
@Hofa Ich benutze normalerweise -P, weil es kürzer ist, bereits --progress enthält und auch --partial enthält, was sinnvoll sein kann, wenn ich bereits an seinem Fortschritt interessiert bin
;-)

9

Fügen Sie nach dem Quellverzeichnis keinen Schrägstrich ein. Ihr Code würde so aussehen:

scp -rp src user@server:dest/

Dadurch wird ein Verzeichnis 'src' unter 'dest' auf dem Remote-Computer erstellt, in dem alle versteckten Dateien enthalten sind. Es ist wahrscheinlich nicht genau das, was Sie wollen, aber es kopiert versteckte Dateien in src.


3

Das Folgende wird das Problem lösen, dies wurde vollständig in unserer kontinuierlichen Integrationsumgebung getestet

scp -rp src/. user@server:dest/
example scp -rp /usr/src/code/. content001@172.11.11.11:/usr/dest/code/

Ich hoffe es hilft


Nachdem scp kürzlich aktualisiert wurde, führt dies nun zu scp: error: unexpected filename: . . Stellen Sie sicher, dass Sie testen, ob es mit Ihrer Distribution funktioniert, Kollege Googler :)
Moritz Friedrich

1

Verwenden Sie diesen Befehl, um nur versteckte Dateien zu kopieren

scp -rp /path_to_copy_hidden/.[!.]* user@host:/path_to_paste/

Tatsächliches Spiel ist das /.[!.]*Tag, das sich auf Dateien bezieht, die mit .(versteckt) beginnen.


0

Keine der oben genannten SCP-Lösungen hat bei mir funktioniert. Allerdings stellte ich fest, dass Folgendes auf Cygwin funktioniert: scp -r Verzeichnis / * Host: Verzeichnis Das '*' stimmte mit allen sichtbaren Dateien überein und übersprang das Unsichtbare.


0

Wenn die Kennwortanmeldung auf dem Remotecomputer deaktiviert ist und die Anmeldung nur über einen öffentlichen Schlüssel möglich ist, können Sie Folgendes ausführen:

$ rsync -av -s 'ssh -i /path/to/your/private/SSH/key' --progress user1@remote.host:/remote/source/directory/ /local/destination/directory/

Es kopiert auch versteckte Dateien.

Beachten Sie auch, dass "user1" die Berechtigung zum Lesen dieser Dateien haben muss. Beispielsweise können Sie mit dieser Methode die ssh-Ordner anderer Benutzer nicht kopieren.


0

Da scpreguläre Ausdrücke unterstützt werden, wird dies den Trick für Sie tun:

scp -rp src/(*|.*) user@server:dest/


0

Die verteilte Revisionskontrolle behandelt versteckte Dateien

Aufgrund der Sicherheitsanfälligkeit in CVE-2018-20685 kann der /.Trick nicht mehr verwendet werden scp. Eine verteilte gitVersionskontrolle wie oder Hg Mecurial behandelt jedoch versteckte Dateien wie alle anderen Dateien. Hier sind die Befehle für meinen Lieblings- Hg Mercurial :

server:$ sudo apt install mercurial
client:$ sudo apt install mercurial
client:$ hg init src
client:$ cd src/
client:$ hg addr
client:$ hg com -m "first commit"
client:$ cd
client:$ hg clone src ssh://user@server/dest/

Nachfolgende Änderungen müssen erneut mit festgeschrieben client:$ hg com -m "commit message"und dann mit dem client:$ hg pushBefehl übertragen werden. Weitere Informationen zum Übertragen von Änderungen finden Sie in diesem Hg Mercurial-Spickzettel .

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.