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 source
dan source/
berbeda. Garis miring berarti menyalin isi folder source
ke 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 FILE
nama 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 cp
sendiri:
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 extglob
juga Anda tidak perlu mengeksporGLOBIGNORE
: itu seharusnya mengubah perilaku shell saat ini, sebagian besar program anak tidak akan peduli tentang itu.