Comment déplacer un file sans conserver les permissions

Le problème est que je veux être en mesure de voir les erreurs lors du déplacement d'un file, mais ne pas voir les erreurs avec le problème de permissions. En d'autres termes – je me soucie si le file n'est pas entièrement transmis, mais je ne veux pas voir les erreurs comme ceci:

mv: n'a pas réussi à conserver la propriété de `/home/blah/backup/pgsql.tar.gz ': Opération non autorisée

Je veux donc quelque chose comme: mv $backupfile $destination --ignore-permissions .

Le file de sauvegarde peut être de 1 MiB à 5 GiB et est transféré via NFS.

mv est le mauvais outil pour ce travail; vous voulez cp et puis rm . Puisque vous déplacez le file vers un autre système de files, c'est exactement ce que mv fait en coulisses, sauf que mv essaie également de conserver les bits d'autorisation de file et les informations de propriétaire / groupe. Ceci est dû au fait que mv préserverait cette information si elle déplaçait un file dans le même système de files et mv essayait de se comporter de la même façon dans les deux situations. Puisque vous ne vous souciez pas de la conservation des bits d'autorisation de file et des informations sur le propriétaire / groupe, n'utilisez pas cet outil. Utilisez plutôt cp --no-preserve=mode et rm .

Lorsque vous déplacez un file dans le même système de files, mv détache le file de son ancien location et l'attache à son nouvel location; les métadonnées telles que les permissions restnt les mêmes. Lorsque vous déplacez un file vers un autre système de files, mv copy le file, tente de répliquer autant de métadonnées que possible et supprime l'original.

Puisque vous déplacez vers un système de files différent et que vous ne voulez pas répliquer beaucoup de métadonnées, vous pouvez aussi copyr le file puis supprimer l'original.

 cp "$backupfile" "$destination" && rm "$backupfile" 

Cela préserve les permissions du file dans une certaine mesure (par exemple, la lisibilité du monde, l'exécutabilité). L'heure de modification du file n'est pas conservée. Avec GNU cp , vous pouvez utiliser l'option --preserve=… pour contrôler ce que les métadonnées sont répliquées plus finement, par exemple --preserve=mode,timestamps .

Vous pouvez également utiliser rsync et lui dire ce que vous voulez préserver. L'option -a signifie "préserver la plupart des métadonnées", ce qui inclut le propriétaire s'il s'exécute uniquement en tant que root.

 rsync -a --no-owner --no-group --remove-source-files "$backupfile" "$destination"