bash déplacer des files cachés, réinitialiser dotglob?

Je voulais déplacer tous les files, y compris en commençant par dot (caché) et les dossiers (récursivement).

J'ai donc utilisé les commands suivantes

shopt -s dotglob nullglob mv ~/public/* ~/public_html/ 

et ça a marché.

Mais ai-je besoin de réinitialiser quoi que ce soit après avoir fait shopt -s dotglob nullglob ? Est-ce que ça ne change pas comment les commands comme mv fonctionnent? Parce que j'aimerais que ça change.

Oui, vous shopt -u nullglob dotglob ces options (avec shopt -u nullglob dotglob ) si vous vouliez récupérer le comportement par défaut de l'interpréteur de commands dans le shell courant.

Tu pourrais juste faire

 mv ~/public/* ~/public/.* ~/public_html/ 

Cela génèrerait toujours une erreur sans set nullglob si l'un des templates ne correspondait à rien, évidemment, mais fonctionnerait sans avoir à définir l'une ou l'autre option. Il serait probablement aussi dire quelque chose à propos de ne pas renommer . puisque c'est un directory, mais cela ne l'empêche pas non plus de déplacer les files.

Une meilleure option peut être d'utiliser localement rsync :

 rsync -av ~/public/ ~/public_html/ 

puis supprimez ~/public .

Il suffit de les désarmer:

 shopt -u dotglob nullglob 

don_crissti fait un bon point sur lequel je vais m'étendre. Il n'est pas clair de la question si dotglob ou nullglob étaient déjà définis avant d'exécuter shopt -s pour les définir. Ainsi, les désactiver à l'aveuglette peut ne pas être la réinitialisation correcte à faire. Si vous les définissez dans un sous-shell, les parameters du shell actuel restront inchangés:

 ( shopt -s dotglob nullglob; mv ~/public/* ~/public_html/ ) 

Toute modification effectuée par shopt affectera uniquement le shell que vous exécutez lorsque vous exécutez la command. IE une fois que vous fermez cette coquille, le changement est parti. Donc, à less que vous n'aimiez garder un shell ouvert pendant longtime (ce que certains font, en utilisant l' screen ou similaire), vous n'avez pas besoin de vous en soucier.

Personnellement, j'utilise rsync comme suggéré par @Kusalananda