Saat ini saya mencoba find
(dan menyalin) semua file dan struktur folder yang cocok dengan pola tertentu, dalam direktori yang ditentukan dan saya sangat di sana!
Secara khusus, saya ingin menyalin semua folder secara rekursif yang tidak dimulai dengan karakter '_' dari jalur yang ditentukan.
find /source/path/with/directories -maxdepth 1 -type d ! -name _\* -exec cp -R {} /destination/path \;
Di / source / path / with / directories / path adalah direktori spesifik mesin yang dimulai dengan '_' dan lainnya, dan saya hanya tertarik untuk menyalin yang lain. Untuk alasan di luar saya, perintah find mengembalikan direktori / source / path / with / directories /, dan karenanya menyalin isinya, direktori dimulai dengan '_' yang disertakan.
Adakah yang punya petunjuk mengapa itu terjadi?
Terima kasih,
Pascal
Jawaban:
find
mengembalikan path root karena cocok dengan kriteria Anda — yaitu itu adalah direktori, dan itu tidak dimulai dengan_
.Anda sedang mencari
-mindepth 1
, saya kira:Referensi: temukan halaman manual
sumber
Ubah dari:
untuk:
Cara
/source/path/with/directories
itu tidak akan dimasukkan.The
shopt -s dotglob
adalah agar*
juga akan cocok file dan direktori dimulai dengan.
(file tersembunyi, direktori).Dan semuanya dibungkus dengan sub-shell
(...)
untuk membatasi efekshopt
hanya di dalam sub-shell, jika tidak Anda harus membatalkannya nanti denganshopt -u dotglob
.sumber
.
. Jangan coba-coba.*
, atau Anda akan mencocokkan seluruh barang yang tidak pernah Anda inginkan. ;-)shopt
.