Tant que vous ne cherchez que des fichiers et dossiers cachés au niveau A et que vous ne voulez pas, par exemple
A/b/.hidden
pour être copié, vous devriez pouvoir utiliser ceci :
cp -r A/.[^.]* B
Cela signifie essentiellement copier tout ce qui commence par un . puis tout caractère autre qu'un . Cela filtre . et ..
Edit :Suppression du -p de la commande cp car Asker n'a pas indiqué qu'il souhaitait conserver les propriétés, les dates, etc.
Le problème avec A/.* c'est qu'il y a le répertoire . en A qui correspond également au motif.
Vous pouvez activer les modèles glob étendus et utiliser les éléments suivants :
shopt -s extglob
cp -r A/.!(?(.)) B
Il correspond aux fichiers dont le nom commence par un point et dont le deuxième caractère n'est ni un point ni rien ( ?(.) correspond à rien ou à un point, !(...) l'annule, c'est-à-dire !(?(.)) correspond à tout le reste que rien ou un point).
Pour des cas comme celui-ci, nous vous recommandons d'utiliser find au lieu de cp comme ceci :
find A/ -type f -maxdepth 1 -name '.*' -exec cp -p {} B/ \;
La syntaxe de base se décompose comme suit :
find A/ -type f:findéléments du répertoireA/dont le type est un fichier (au lieu d'un répertoire)…-maxdepth 1 -name '.*':A ceci pour unmaxdepthde 1 répertoires et dontnamecommence par..-exec cp -p {} B/ \;:Et une fois ces fichiers trouvés,execlecpcommande avec un-pdrapeau pour conserver les dates/heures de la source ({}) à la destination deB/.
J'aime utiliser maxdepth pour ajouter une couche de contrôle afin de ne pas copier accidentellement un système de fichiers entier. Mais n'hésitez pas à le supprimer.