Selama Anda hanya mencari file dan folder tersembunyi di level A dan tidak mau, misalnya
A/b/.hidden
untuk disalin, Anda harus dapat menggunakan ini:
cp -r A/.[^.]* B
Ini pada dasarnya berarti menyalin apapun yang dimulai dengan . lalu karakter apa pun selain . Itu menyaring . dan ..
Sunting:Menghapus -p dari perintah cp karena Asker belum mengindikasikan bahwa dia ingin mempertahankan kepemilikan, tanggal, dll.
Masalah dengan A/.* adalah bahwa ada direktori . di A yang juga cocok dengan polanya.
Anda dapat mengaktifkan pola glob yang diperluas dan menggunakan yang berikut:
shopt -s extglob
cp -r A/.!(?(.)) B
Itu cocok dengan file yang namanya dimulai dengan titik dan yang karakter keduanya bukan titik atau bukan apa-apa ( ?(.) tidak cocok dengan apa pun atau titik, !(...) meniadakannya, yaitu !(?(.)) cocok dengan yang lainnya daripada tidak sama sekali atau titik).
Untuk kasus seperti ini akan merekomendasikan menggunakan find bukannya cp seperti ini:
find A/ -type f -maxdepth 1 -name '.*' -exec cp -p {} B/ \;
Sintaks dasar terurai seperti ini:
find A/ -type f:finditem dalam direktoriA/yang jenisnya adalah file (bukan direktori)…-maxdepth 1 -name '.*':Untuk ini untukmaxdepthdari 1 direktori dan yangnamedimulai dengan..-exec cp -p {} B/ \;:Dan setelah file-file ini ditemukan,execcpperintah dengan-ptandai untuk mempertahankan tanggal/waktu dari sumbernya ({}) ke tujuanB/.
Saya suka menggunakan maxdepth untuk menambahkan lapisan kontrol jadi saya tidak sengaja menyalin seluruh sistem file. Tapi jangan ragu untuk menghapusnya.