web-dev-qa-db-fra.com

"mv" contre "cp" dans un script bash

J'essaie de créer un script capable de charger certains paramètres et fichiers sur un tableau. Fondamentalement, je vais plus un lecteur flash dans le conseil, cliquez sur le script. Le script copiera/déplacera ensuite certains fichiers pour remplacer les anciens qui sont obsolètes. Un exemple de ceci serait que je remplace le /etc/apt/sources.list par un nouveau pour différents référentiels. Est-il préférable de copier ou de déplacer un fichier à cet emplacement pour le remplacer? Je vais également installer Apache2 dans ce script, puis passer des répertoires aux fichiers www et cgi-bin. Est-il préférable de copier ou de déplacer des répertoires? Je vais aussi changer les autorisations.

Ma question est la suivante: est-il préférable de déplacer mv ou de copier cp des fichiers et des répertoires lorsque vous utilisez des scripts bash?

1
Keith

si vous n’en avez besoin que dans le chemin cible, copiez-le si vous en avez besoin aux deux endroits. Il n’existe aucune "insécurité" inhérente à mv ou cp, et vous aurez vous ajouterez inutilement de la complexité (et des bugs extrêmement probables) à vos scripts si vous commencez à essayer d’implémenter votre propre mv.

Pour des cas particuliers, il peut y avoir des outils plus appropriés que les deux. Par exemple, si vous souhaitez changer de propriétaire ou de mode lors de la copie, utilisez l'outil install qui le fait sur une ligne plutôt que sur trois.

2
l0b0

Ça dépend. Dans certaines situations (généralement rares), vous devez attribuer au fichier un nom temporaire sur le système de fichiers cible, puis le mv à son nom final, car l'opération mv est atomique sur un système de fichiers journalisé. Si l'application tente de lire ce fichier pendant que vous le remplacez, procédez comme suit.

Vous avez indiqué que vous transférez le fichier à partir d'un autre système de fichiers (clé USB). Dans ce cas, mv fait un cp && rm implicite. Si vous remontez 20 ans en arrière, mv ne l’a même pas soutenu, mais il n’ya aucune raison de rester dans l’histoire.

1
Charlie Hedlin