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?


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.


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


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.


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

Semoga ini bisa membantu


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)


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.


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


0

Sebagai scpdukungan ekspresi reguler, ini akan membantu Anda:

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


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 .

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.