perintah cp untuk mengecualikan file tertentu agar tidak disalin

35

Apakah ada cara untuk menggunakan perintah 'cp' untuk menyalin direktori dan mengecualikan file / sub-direktori tertentu di dalamnya?

Stephen Jacob
sumber

Jawaban:

57

Gunakan rsync:

rsync -avr --exclude='path1/to/exclude' --exclude='path2/to/exclude' source destination

Perhatikan bahwa menggunakan sourcedan source/berbeda. Garis miring berarti menyalin isi folder sourceke dalamnya destination. Tanpa garis miring, itu berarti menyalin sumber folder ke destination.

Atau, jika Anda memiliki banyak direktori (atau file) untuk dikecualikan, Anda dapat menggunakan --exclude-from=FILE, di mana FILEnama file yang berisi file atau direktori untuk dikecualikan.

--exclude mungkin juga berisi wildcard, seperti --exclude=*/.svn*

Disalin Dari: https://stackoverflow.com/a/2194500/749232

Jika Anda ingin menggunakannya cpsendiri:

find . -type f -not -iname '*/not-from-here/*' -exec cp '{}' '/dest/{}' ';'

Ini mengasumsikan struktur direktori target sama dengan sumbernya.

Disalin Dari: https://stackoverflow.com/a/4586025/749232

disajikan89
sumber
3

Terlambat ke dalam gim tetapi di sini ada solusi yang sangat berbeda menggunakan bash dan cp polos: Anda dapat menggunakan spesifikasi file global sambil mengabaikan beberapa file.

Asumsikan direktori berisi file:

$ ls *
listed1  listed2  listed3  listed4  unlisted1  unlisted2  unlisted3

Menggunakan variabel GLOBIGNORE :

$ export GLOBIGNORE='unlisted*'
$ ls *
listed1  listed2  listed3  listed4

Atau dengan pengecualian yang lebih spesifik:

$ export GLOBIGNORE='unlisted1:unlisted2'
$ ls *
listed1  listed2  listed3  listed4  unlisted3

Atau menggunakan kecocokan negatif :

$ ls !(unlisted*)
listed1  listed2  listed3  listed4

Ini juga mendukung beberapa pola yang tidak cocok:

$ ls !(unlisted1|unlisted2)
listed1  listed2  listed3  listed4  unlisted3
xenoid
sumber
1
Untuk kecocokan negatif, Anda harus mengaktifkan gumpalan diperpanjang:, shopt -s extglobjuga Anda tidak perlu mengekspor GLOBIGNORE: itu seharusnya mengubah perilaku shell saat ini, sebagian besar program anak tidak akan peduli tentang itu.
muru