Finché cerchi solo file e cartelle nascosti a livello di A e non vuoi, ad esempio
A/b/.hidden
da copiare, dovresti essere in grado di usare questo:
cp -r A/.[^.]* B
In pratica significa copiare tutto ciò che inizia con . e poi qualsiasi carattere diverso da . Ciò esclude . e ..
Modifica:rimosso -p dal comando cp poiché Asker non ha indicato di voler preservare proprietà, date, ecc.
Il problema con A/.* è che c'è la directory . in A che corrisponde anche al pattern.
Puoi attivare i modelli glob estesi e utilizzare quanto segue:
shopt -s extglob
cp -r A/.!(?(.)) B
Corrisponde ai file il cui nome inizia con un punto e il cui secondo carattere non è né un punto né niente ( ?(.) corrisponde a niente o a un punto, !(...) lo nega, cioè !(?(.)) corrisponde a tutto il resto che niente o un punto).
Per casi come questo consigliamo di utilizzare find invece di cp come questo:
find A/ -type f -maxdepth 1 -name '.*' -exec cp -p {} B/ \;
La sintassi di base si suddivide in questo modo:
find A/ -type f:findelementi nella directoryA/il cui tipo è un file (invece di una directory)…-maxdepth 1 -name '.*':A questo per unmaxdepthdi 1 directory e di cuinameinizia con..-exec cp -p {} B/ \;:E una volta trovati questi file,execilcpcomando con un-pflag per preservare date/orari dalla fonte ({}) alla destinazione diB/.
Mi piace usare maxdepth per aggiungere un livello di controllo in modo da non copiare accidentalmente un intero filesystem. Ma sentiti libero di rimuoverlo.