Copier les permissions de fichier, mais pas les fichiers

J’ai deux copies du même arbre de répertoire. 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 relatifs et tout).

Supposons qu’ils se trouvent dans des répertoires:

version1/ version2/ 

Le problème est que les permissions dans version1 / ont été endommagées, et je voudrais copier les permissions de la version2 /, mais le faire 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, ce pourrait être une autre méthode / un autre langage de programmation).

Vous devriez jeter un oeil à l’option --reference pour chmod :

 chmod --reference version2/somefile version1/somefile 

Appliquer find et xargs de manière appropriée et ça devrait aller, par exemple quelque chose comme

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

Cela fonctionne même de manière récursive, et est robuste contre les fichiers manquants dans le répertoire cible (barre les erreurs No such file … , qui peuvent être ignorées). Bien sûr, cela ne fera rien pour les fichiers qui n’existent que dans le répertoire cible.

À votre santé,

Vous pouvez utiliser ce script (il modifie les permissions de manière récursive mais individuelle 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

Tu pourrais essayer:

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

À moins que les permissions soient précises et différentes d’un fichier à l’autre, vous pouvez créer un chmod récursif sur le répertoire et unifier les permissions.

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