GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana cara menggunakan perintah 'cp' untuk mengecualikan direktori tertentu?

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.


Linux
  1. [Linux] :Cara mengecualikan direktori saat menggunakan perintah shell "tar"

  2. Perintah rsync Linux:cara menggunakannya

  3. Bagaimana Cara Menjadwalkan Perintah Rsync?

  1. Cara Menggunakan Perintah Linux Rsync (Sinkronisasi Jarak Jauh)

  2. Cara mengecualikan direktori di find . memerintah

  3. Bagaimana saya bisa mengecualikan direktori dari perintah ls

  1. Cara menggunakan Perintah Su di Linux

  2. Cara Mengecualikan Direktori Tertentu Dari Menyalin Di Linux

  3. Bagaimana cara menggunakan perintah Rsync di linux?