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?


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 .

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 .

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

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.

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.