Apakah ada cara untuk menggunakan perintah 'cp' untuk menyalin direktori dan mengecualikan file / sub-direktori tertentu di dalamnya?
Apakah ada cara untuk menggunakan perintah 'cp' untuk menyalin direktori dan mengecualikan file / sub-direktori tertentu di dalamnya?
Jawaban:
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
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
shopt -s extglobjuga Anda tidak perlu mengeksporGLOBIGNORE: itu seharusnya mengubah perilaku shell saat ini, sebagian besar program anak tidak akan peduli tentang itu.