Jak zmusić scp do skopiowania ukrytych plików?

63

Często używam SCP do kopiowania plików - szczególnie plików internetowych. Problem polega na tym, że za każdym razem, gdy to robię, nie mogę uzyskać polecenia kopiowania ukrytych plików (np. .Htaccess).

Zazwyczaj przywołuję to:

scp -rp src/ user@server:dest/

To nie kopiuje ukrytych plików. Nie chcę ponownie tego przywoływać (robiąc coś takiego scp -rp src/.* ...- i to ma dziwne .i ..implikacje).

Na scpstronie podręcznika nic nie widziałem na temat „dołącz ukryte pliki”.

Jak mogę to osiągnąć?

zgrzyt
źródło
Zakładam, że src/.*również kopiuje src/..(katalog macierzysty), prawda?
Ken Sharp

Odpowiedzi:

67

To absolutnie powinno pasować do ukrytych plików. Na końcu źródła znajduje się napis „każdy plik w tym katalogu”. Niemniej jednak testy i badania są dla ciebie wystarczające. To jest głupie zachowanie.

Odpowiedź ” polega na dodaniu kropki na końcu źródła:

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

Prawdziwa odpowiedź jest użycie rsync.

Matt Simmons
źródło
Fajna sztuczka Jeszcze nie zdawałem sobie z tego sprawy.
cstamas
21
rsync -avz -e ssh --progress src / user @ server: dest /
MikeyB
2
Nie mogę odtworzyć tego zachowania. scp -r source/ host:source2kopiuje pliki kropkowe. Działa w OpenSSH 5.1 od 2007 r.
Mikel
3
Pamiętaj, że dodawanie .na końcu nie działa (2019) z powodu problemów z bezpieczeństwem. Wyjaśniono to tutaj: superuser.com/questions/1403473/scp-error-u
nieoczekiwana
25

Możesz wypróbować rsync. Lepiej nadaje się do tej pracy:

rsync -av src / użytkownik @ serwer: dest /

(A jego strona podręcznika jest warta przeczytania.)

cstamas
źródło
2
Ja zawsze należy wybrać opcję --progress dla rsync, nie mogę bez niej żyć = D
Hofa
1
@Hofa Zwykle używam -P, ponieważ jest krótszy, zawiera już --progress, a także - częściowy, co może mieć sens, jeśli już jestem zainteresowany jego postępem ;-)
cstamas
9

Nie umieszczaj ukośnika za katalogiem źródłowym. Twój kod wyglądałby tak:

scp -rp src user@server:dest/

Spowoduje to utworzenie katalogu „src” w obszarze „dest” na komputerze zdalnym, z uwzględnieniem wszystkich ukrytych plików. Prawdopodobnie nie jest to dokładnie to, czego chcesz, ale skopiuje ukryte pliki w src.

kbyrd
źródło
3

Poniższe rozwiązania rozwiążą problem, który został w pełni przetestowany w naszym środowisku ciągłej integracji

scp -rp src/. user@server:dest/
example scp -rp /usr/src/code/. [email protected]:/usr/dest/code/

Mam nadzieję, że to pomoże

stevensagaar
źródło
Po niedawnej aktualizacji SCP powoduje to teraz scp: error: unexpected filename: . . Sprawdź, czy to działa z twoją dystrybucją, kolego Googler :)
Moritz Friedrich
1

Aby skopiować tylko ukryte pliki, użyj tego polecenia

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

Rzeczywista gra to /.[!.]*znacznik odnoszący się do plików rozpoczynających się od .(ukryty)

Shahzaib Hayat Khan
źródło
0

Żadne z powyższych rozwiązań SCP nie działało dla mnie. Odkryłem jednak, że następujące działania działały na cygwin: scp -r katalog / * host: katalog „*” pasowało do wszystkich widocznych plików i pomijałem niewidzialne.

Ray Cote
źródło
0

Jeśli logowanie zdalne jest wyłączone na zdalnym komputerze, a jedynym sposobem logowania jest klucz publiczny, możesz użyć tego:

$ rsync -av -s 'ssh -i /path/to/your/private/SSH/key' --progress [email protected]:/remote/source/directory/ /local/destination/directory/

Kopiuje również ukryte pliki.

Należy również pamiętać, że „użytkownik1” musi mieć uprawnienia do odczytu tych plików, na przykład nie można kopiować folderów ssh innego użytkownika za pomocą tej metody.

Gergely Lukacsy
źródło
0

Ponieważ scpobsługuje wyrażenia regularne, dobrze to załatwi:

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

donmutti
źródło
0

Rozproszona kontrola wersji obsługuje ukryte pliki

Z powodu podatności CVE-2018-20685 tej /.sztuczki nie można już używać z scp. Jednak rozproszona kontrola wersji, jak gitlub Hg Mecurial, będzie obsługiwać ukryte pliki, tak jak inne pliki. Oto polecenia dla mojego ulubionego 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/

Kolejne zmiany będą musiały zostać client:$ hg com -m "commit message"zatwierdzone ponownie, a następnie wprowadzone za pomocą client:$ hg pushpolecenia. Dowiedz się więcej o wypychaniu zmian z tego ściągawki Hg Mercurial .

Serge Stroobandt
źródło