Saya perlu menyalin semua file .class dari server ke lokal dengan semua dir yang dipesan. misal server:/usr/some/unknown/number/of/sub/folders/me.class
akan jadi /usr/project/backup/some/unknown/number/of/sub/folders/me.class
masalah adalah, masih banyak file tidak berguna lainnya seperti file .svn-base yang tidak saya inginkan. bagaimana cara memfilternya jadi saya hanya scp
file kelas.?
99
Jawaban:
Saya mungkin akan merekomendasikan menggunakan sesuatu seperti
rsync
ini karenainclude
danexclude
benderanya, misalnya: -Beberapa tanda berguna lainnya:
-r
untuk rekursif-a
untuk arsip (kebanyakan semua file)-v
untuk keluaran verbose-e
untuk menentukan ssh alih-alih default (yang seharusnya ssh, sebenarnya)sumber
-a
sudah termasuk-r
sesuai dengan halaman manual rsync.--prune-empty-dirs
akan menghapus direktori kosong.Untuk mengecualikan dotfiles di direktori dasar:
[!.]*
adalah shell glob yang meluas ke semua file di direktori kerja yang tidak dimulai dengan titik.sumber
Tidak ada fitur di scp untuk memfilter file. Untuk hal-hal "lanjutan" seperti ini, saya sarankan menggunakan rsync:
(baris ini menyalin rsync dari folder jauh ke folder saat ini)
Versi terbaru dari rsync tunnel melalui koneksi ssh secara otomatis secara default.
sumber
Karena Anda bisa,
scp
Anda harusnya baik- baik sajassh
,skrip yang berikut atau login dan jalankan ...
kembali (logout) ke server lokal dan
scp
,Jika Anda merasa
$(find ...)
terlalu lama untuk tar Anda berubah,Akhirnya, karena Anda menyimpannya
/usr/project/backup/
,mengapa repot-repot mengekstraksi? Simpan saja
tar.bz2
, mungkin dengan cap tanggal + waktu.sumber
rsync
danssh
menginstal di OS. Sebaliknya, ini adalah solusi yang cerdas. Terima kasih!Di bawah perintah untuk file.
scp `temukan. -maxdepth 1 -name "* .log" \! -name "hs_err_pid2801.log" -type f` root @ IP: / tmp / test /
Di bawah perintah untuk direktori.
scp -r `temukan. -maxdepth 1 -name "lo *" \! -name "localhost" -type d` root @ IP: / tmp / test /
Anda dapat menyesuaikan perintah di atas sesuai kebutuhan Anda.
sumber
Dengan otentikasi berbasis kunci ssh diaktifkan, skrip berikut akan berfungsi.
sumber
Jika Anda memang ingin menggunakan scp, ada cara tidak langsung. Katakanlah kami ingin menyalin semua file .jpg di bawah folder lokal '/ src' ke folder '/ dst' di server jauh 10.1.1.2:
sumber
sumber
Salin folder sumber Anda ke
somedir
:cp -r
srcdir
somedir
Hapus semua file yang tidak dibutuhkan:
temukan somedir -name '.svn' -exec rm -rf {} \ +
luncurkan scp dari
somedir
sumber
tar
atauzip
-file. Sebaliknya, tidak ada kompresi (scp melakukan kompresi) dan kode 'paket' disalin.