Bagaimana cara membuat scp menyalin file tersembunyi?

63

Saya sering menggunakan SCP untuk menyalin file - terutama file yang berhubungan dengan web. Masalahnya adalah bahwa setiap kali saya melakukan ini, saya tidak bisa mendapatkan perintah untuk menyalin file tersembunyi (mis., Htaccess).

Saya biasanya memohon ini:

scp -rp src/ user@server:dest/

Ini tidak menyalin file tersembunyi. Saya tidak ingin harus memohon ini lagi (dengan melakukan sesuatu seperti scp -rp src/.* ...- dan itu tetap aneh .dan ..implikasinya.

Saya tidak melihat apa pun di scphalaman manual tentang "sertakan file tersembunyi".

Bagaimana saya bisa mencapai ini?

serak
sumber
Saya berasumsi itu src/.*juga salinan src/..(direktori induk), kan?
Ken Sharp

Jawaban:

67

Itu harus benar-benar cocok dengan file yang tersembunyi. / Di akhir sumber mengatakan "setiap file di bawah direktori ini". Namun demikian, pengujian dan penelitian memberi Anda dukungan. Ini perilaku bodoh.

" Jawaban " adalah menambahkan titik ke akhir sumber:

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

The nyata Jawabannya adalah dengan menggunakan rsync.

Matt Simmons
sumber
Trik yang bagus saya belum menyadari hal ini.
cstamas
21
rsync -avz -e ssh - kemajuan src / user @ server: dest /
MikeyB
2
Saya tidak bisa mereproduksi perilaku itu. scp -r source/ host:source2salinan file dot. Bekerja di OpenSSH 5.1 dari 2007.
Mikel
3
Perhatikan bahwa menambahkan .pada akhirnya tidak lagi berfungsi (2019) karena masalah keamanan. Ini dijelaskan di sini: superuser.com/questions/1403473/scp-error-unexpected-filename
Stéphane
25

Anda dapat mencoba rsync. Lebih cocok untuk pekerjaan ini:

rsync -av src / user @ server: dest /

(Dan halaman manualnya layak dibaca.)

cstamas
sumber
2
Saya selalu menggunakan opsi --progress untuk rsync, saya tidak bisa hidup tanpanya = D
Hofa
1
@Hofa Saya biasanya menggunakan -P karena lebih pendek, sudah termasuk --progress dan juga termasuk --partial yang bisa masuk akal jika saya sudah tertarik dengan progresnya ;-)
cstamas
9

Jangan menaruh garis miring setelah direktori sumber. Kode Anda akan terlihat seperti ini:

scp -rp src user@server:dest/

Ini akan membuat direktori 'src' di bawah 'dest' pada mesin jarak jauh, dengan semua file tersembunyi disertakan. Mungkin bukan yang Anda inginkan, tetapi itu akan menyalin file tersembunyi di src.

kbyrd
sumber
3

Berikut ini akan menyelesaikan masalah, ini telah sepenuhnya diuji pada lingkungan integrasi berkelanjutan kami

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

Semoga ini bisa membantu

stevensagaar
sumber
Setelah memperbarui scp baru-baru ini, ini sekarang menghasilkan scp: error: unexpected filename: . . Pastikan untuk menguji apakah itu berfungsi dengan distribusi Anda, sesama Googler :)
Moritz Friedrich
1

Untuk menyalin hanya file yang tersembunyi, Gunakan perintah ini

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

Game aktual adalah /.[!.]*tag yang merujuk ke file yang dimulai dengan .(disembunyikan)

Shahzaib Hayat Khan
sumber
0

Tidak ada solusi scp di atas yang berfungsi untuk saya. Namun, saya memang menemukan bahwa yang berikut ini berfungsi pada cygwin: scp -r direktori / * host: direktori '*' cocok dengan semua file yang terlihat dan melewatkan yang tidak terlihat.

Ray Cote
sumber
0

Jika login kata sandi dinonaktifkan pada mesin jarak jauh, dan satu-satunya cara untuk login adalah melalui kunci publik, maka Anda dapat menggunakan ini:

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

Ini menyalin file yang tersembunyi juga.

Harap perhatikan juga bahwa "user1" harus memiliki izin untuk membaca file-file itu, misalnya Anda tidak dapat menyalin folder ssh pengguna lain dengan metode ini.

Gergely Lukacsy
sumber
0

Sebagai scpdukungan ekspresi reguler, ini akan membantu Anda:

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

donmutti
sumber
0

Kontrol revisi yang didistribusikan menangani file tersembunyi

Karena CVE-2.018-20.685 kerentanan, yang /.trik tidak lagi dapat digunakan dengan scp. Namun, kontrol revisi terdistribusi seperti gitatau Hg Mecurial akan menangani file tersembunyi seperti file lainnya. Berikut adalah perintah untuk Hg Mercurial favorit saya :

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/

Perubahan selanjutnya perlu dilakukan lagi dengan client:$ hg com -m "commit message"dan kemudian didorong menggunakan client:$ hg pushperintah. Pelajari lebih lanjut tentang mendorong perubahan dari lembar contekan Hg Mercurial ini .

Serge Stroobandt
sumber