Je copie des fichiers de la source vers l'emplacement. La source ne m'appartient pas et l'autorisation pour les fichiers à la source est ---- rwx ---. L'autorisation des fichiers copiés dans le répertoire de destination qui m'appartient est ---- r-x ---. L'autorisation du répertoire de destination est drwxrwsrwx. Comment puis-je avoir les fichiers avec la même autorisation de répertoire de destination. J'ai essayé "cp --no-preserve = all" mais cela n'a pas fonctionné (toujours la même permission).
Essaye ça:
cp --no-preserve=mode,ownership $backupfile $destination
Permettez-moi de reformuler cela pour "Comment conserver les autorisations du répertoire de destination sur la copie?"
Je ne peux pas m'attribuer le mérite de la réponse car je viens de combiner quelques réponses que j'ai trouvées dans la nature. Alors ça vient.
Les autorisations ne sont généralement pas propagées par le répertoire dans lequel les fichiers sont copiés, mais les nouvelles autorisations sont plutôt contrôlées par l'umask de l'utilisateur . Cependant, lorsque vous copiez un fichier d'un emplacement à un autre, c'est un peu un cas spécial où l'umask de l'utilisateur est essentiellement ignoré et les autorisations existantes sur le fichier sont préservées.
Ce qui explique pourquoi vous ne pouvez pas directement propager les autorisations du répertoire src vers le répertoire dst.
Cependant, il existe une solution de contournement en deux étapes.
#!/bin/bash
# Filename: cp-metadata
myecho=echo
src_path="$1"
dst_path="$2"
find "$src_path" |
while read src_file; do
dst_file="$dst_path${src_file#$src_path}"
$myecho chmod --reference="$src_file" "$dst_file"
$myecho chown --reference="$src_file" "$dst_file"
$myecho touch --reference="$src_file" "$dst_file"
done
Vous pouvez ignorer la commande touch
si vous ne souhaitez pas conserver l'horodatage. Remplacer myecho=echo
avec myecho=
pour exécuter réellement les commandes.
Gardez à l'esprit que ce script doit être exécuté en mode Sudo
afin de pouvoir exécuter chown
et chmod
efficacement
cp --preserve
: Après avoir exécuté avec succès la première commande, il est maintenant temps de copier le contenu et les attributs dans le répertoire dst.
--preserve [= ATTR_LIST]
conserve les attributs spécifiés (par défaut: mode, propriété, horodatages), si possible des attributs supplémentaires: contexte, liens, xattr, tous
\cp -rfp $src_dir $dst_dir
devrait faire ce que vous voulez.