web-dev-qa-db-fra.com

Copiez les autorisations de fichier, mais pas les fichiers

J'ai deux copies de la même arborescence de répertoires. Ils ont presque les mêmes fichiers dans les deux (une version peut avoir quelques fichiers supplémentaires ou manquants). Cependant, la plupart des fichiers sont communs aux deux répertoires (ont les mêmes chemins d'accès relatifs et tout).

Supposons que ceux-ci se trouvent dans des répertoires:

version1/
version2/

Le problème est que les autorisations de la version1/ont été gâchées, et je voudrais copier les autorisations de la version2 /, mais faites-le sans remplacer les fichiers de la version1/qui sont plus récents.

Existe-t-il un moyen automatisé de le faire via bash? (Il n'est pas nécessaire que ce soit bash, il pourrait également s'agir d'un autre langage de méthode/programmation).

34
user788171

Vous devriez jeter un œil au --reference option pour chmod :

chmod --reference version2/somefile version1/somefile

Appliquez find et xargs d'une manière appropriée et vous devriez être bien, c'est-à-dire quelque chose comme

 ~/version2$ find . -type f | xargs -I {} chmod --reference {} ../version1/{}

Cela fonctionne même récursivement et est robuste contre les fichiers manquants dans le répertoire cible (sauf les erreurs Pas de fichier de ce type ... , qui peuvent être ignorées). Bien sûr, cela ne fera rien aux fichiers qui n'existent que dans le répertoire cible.

À votre santé,

68

Vous pouvez utiliser ce script (il modifie les autorisations récursivement mais individuellement pour chaque fichier/répertoire)

#!/bin/sh
chmod --reference $1 $2
if [ -d $1 ]
then
    if [ "x`ls $1`" != "x" ]
    then
        for f in `ls $1`
        do
            $0 $1/$f $2/$f
        done
    fi
fi

Exécutez le script avec les arguments version2 version1

10
uba

Tu pourrais essayer:

chmod owner-group-other ./dir or ./file

À moins que les autorisations soient fines et différentes d'un fichier à l'autre, vous pouvez effectuer un chmod récursif sur le répertoire et unifier les autorisations.

Voir man chmod pour des références sur les options qui pourraient être utiles

0
swappy