Saya menggunakan scp untuk menyalin direktori dari satu server jauh ke direktori baru (yaitu hanya mengubah nama) di server jauh lain seperti:
scp -prq server1:dir1 server2:dir2
Ini berfungsi dengan baik jika dir2 tidak ada pada server2, ia menciptakan direktori baru yang disebut dir2 yang berisi segalanya dari dir1 pada server1.
Masalahnya muncul ketika dir2 sudah ada di server2 (CATATAN: Saya tidak punya cara untuk mengetahui hal ini sebelumnya atau melakukan penghapusan pada dir2 di server2 sebelumnya) - yang terjadi adalah saya mendapatkan salinan dir1, disebut dir1, di dir2.
Saya yakin ada sesuatu yang mendasar yang saya lewatkan, tetapi sepertinya saya tidak bisa menyelesaikannya.
Setiap bantuan sangat dihargai!
Salam,
Giles
Oke, saya punya kurang dari 10 rep dan tidak bisa menunggu 8 jam jadi di sini adalah apa yang saya dapatkan:
Berikut ini skrip yang berfungsi untuk saya:
#!/bin/sh
echo "method 1"
scp -prq server1:dir1/* server2:dir2/ >/dev/null 2>&1
if [ "$?" -ne "0" ]; then
echo "failed ... trying method 2"
scp -prq server1:dir1 server2:dir2
fi
exit
Masih tidak yakin bagaimana melakukan ini dalam satu perintah atau bahkan jika memungkinkan.
Cheers @mindthemonkey, terkadang hanya mendapatkan sudut pandang baru dapat membantu menunjukkan jalannya.
cd dir2
.Jawaban:
Gunakan sintaks "dot" ini:
Ini menyalin isi direktori itu, bukan direktori itu sendiri. Dan saya percaya ini lebih portabel daripada
*
globbing.sumber
scp: error: unexpected filename: .
Biasanya untuk mengontrol pembuatan direktori, Anda perlu menggunakan trailing
/
untuk menyiratkan path lengkap tapi saya pikir ini akan gagal membuat direktori jika tidak ada:Ini juga bisa melewatkan tersembunyi. file karena ekspansi * glob (tanpa pekerjaan khusus shell yang rumit )
Anda dapat mendekatinya secara berbeda dengan
ssh
dantar
.Tapi ini berarti lalu lintas melalui mesin lokal Anda.
sumber