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?

rascher
quelle
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.

Matt Simmons
quelle
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.)

cstamas
quelle
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.

kbyrd
quelle
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/. [email protected]:/usr/dest/code/

Ich hoffe es hilft

Stevensagaar
quelle
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.

Shahzaib Hayat Khan
quelle
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.

Ray Cote
quelle
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 [email protected]:/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.

Gergely Lukacsy
quelle
0

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

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

donmutti
quelle
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 .

Serge Stroobandt
quelle