scp -r ... tetapi tinggalkan (kecualikan) subdirektori yang ditentukan

29

Berikut struktur direktori:

/a/
/a/b/
/a/c/

Saya ingin menyalin semuanya, KECUALI untuk subdirektori / a / c /.

scp -rp myserver:/a .      # this will copy everything

T: Bagaimana cara saya menentukan direktori yang tidak disertakan dalam perintah scp?

russian_spy
sumber
3
Motivasi asli adalah bahwa subdirektori "/ a / c /" sangat besar (gigabytes), jadi meninggalkannya akan mengurangi salinan dari menit ke detik.
russian_spy

Jawaban:

28

Saya tidak berpikir Anda bisa, tetapi Anda bisa menggunakan rsync? Sesuatu seperti ini:

rsync -a --exclude=a/c myserver:/a .
Paul Dixon
sumber
5

Saya pikir ini mungkin cara yang benar untuk melakukannya sehingga Anda masih menggunakan SSH, saya belum menemukan cara untuk melakukannya dengan scp - tetapi menggunakan rsync over ssh mungkin menyelesaikannya.

rsync -e 'ssh -ax' -av --exclude /a/c myserver:/a .

Jika Anda menggunakan -n switch maka itu akan membuat proses berjalan kering:

 rsync -e 'ssh -ax' -av --exclude /a/c -n myserver:/a .

sumber
Juga mencoba -rz: -e "ssh -i private.pem" -rz 'users@server:/full/path/'.
mbrownnyc
1

Anda bisa menggunakan extended globbing seperti pada contoh di bawah ini:

#Enable extglob
shopt -s extglob

cp -rv !(./excludeme/*.jpg) /var/destination
WackGet
sumber
0

Bukan cara yang sempurna untuk melakukannya, tetapi atur sub-direktori yang ingin Anda kecualikan sebagai hanya-baca. chmod -R 444 /a/charus melakukan trik. Anda akan mendapatkan kesalahan "izin ditolak" ketika mencoba untuk menulis lebih dari direktori itu.

sjobe
sumber