Mengapa menggunakan rsync
ketika Anda bisa melakukan:
find . -type f -not -iname '*/not-from-here/*' -exec cp '{}' '/dest/{}' ';'
Ini mengasumsikan struktur direktori target sama dengan sumbernya.
cp -r `ls -A | grep -v "c"` $HOME/
Nah, jika pengecualian pola nama file tertentu harus dilakukan oleh setiap utilitas file unix-ish (seperti cp, mv, rm, tar, rsync, scp, ...), duplikasi upaya yang sangat besar akan terjadi. Sebaliknya, hal-hal seperti itu dapat dilakukan sebagai bagian dari globbing, yaitu dengan shell Anda.
pesta
man 1 bash
, / extglob .
Contoh:
$ shopt -s extglob $ echo images/* images/004.bmp images/033.jpg images/1276338351183.jpg images/2252.png $ echo images/!(*.jpg) images/004.bmp images/2252.png
Jadi Anda cukup memasukkan pola di dalam !()
, dan itu meniadakan kecocokan. Polanya bisa rumit secara sewenang-wenang, mulai dari pencacahan jalur individual (seperti yang ditunjukkan Vanwaril di jawaban lain):!(filename1|path2|etc3)
, untuk hal-hal seperti regex dengan bintang dan kelas karakter. Lihat halaman manual untuk detailnya.
zsh
man 1 zshexpn
, / pembuatan nama file .
Anda dapat melakukan setopt KSH_GLOB
dan gunakan pola seperti bash. Atau,
% setopt EXTENDED_GLOB % echo images/* images/004.bmp images/033.jpg images/1276338351183.jpg images/2252.png % echo images/*~*.jpg images/004.bmp images/2252.png
Jadi x~y
cocok dengan pola x
, tetapi mengecualikan pola y
. Sekali lagi, untuk detail lengkap lihat halaman manual.
ikan
Cangkang ikan memiliki jawaban yang jauh lebih cantik untuk ini:
ð cp (string match -v '*.excluded.names' -- srcdir/*) destdir
Tip pro bonus
Ketik cp *
, tekan Ctrl X * dan lihat saja apa yang terjadi.
rsync
cepat dan mudah:
rsync -av --progress sourcefolder /destinationfolder --exclude thefoldertoexclude
Anda dapat menggunakan --exclude
beberapa kali.
rsync -av --progress sourcefolder /destinationfolder --exclude thefoldertoexclude --exclude anotherfoldertoexclude
Perhatikan bahwa direktori thefoldertoexclude
setelah --exclude
opsi relatif terhadap sourcefolder
, yaitu, sourcefolder/thefoldertoexclude
.
Anda juga dapat menambahkan -n
untuk uji coba untuk melihat apa yang akan disalin sebelum melakukan operasi nyata, dan jika semuanya baik-baik saja, hapus -n
dari baris perintah.