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ąć?


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.


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.)


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.


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/. content001@172.11.11.11:/usr/dest/code/

Mam nadzieję, że to pomoże


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)


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.


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 user1@remote.host:/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.


0

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

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


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 .

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.