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
:find
item dalam direktoriA/
yang jenisnya adalah file (bukan direktori)…-maxdepth 1 -name '.*'
:Untuk ini untukmaxdepth
dari 1 direktori dan yangname
dimulai dengan.
.-exec cp -p {} B/ \;
:Dan setelah file-file ini ditemukan,exec
cp
perintah dengan-p
tandai 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.