Copy file permissions, but not files in Unix
(From : https://stackoverflow.com/questions/15245144/copy-file-permissions-but-not-files, closed because off-topic)
I have two copies of the same directory tree. They almost have the same files in both (one version may have a couple extra or missing files). However, most of the files are in common to both directories (have the same relative paths and everything).
Assume these are in directories:
version1/
version2/
The problem is that the permissions in version1/ got messed up, and I would like to copy over the permissions from version2/, but do it without replacing the files in version1/ which are newer.
Is there an automated way to do this via shell commands or scripts?
Solution 1:
GNU cp knows the --attributes-only
flag since coreutils 8.6
--attributes-only don't copy the file data, just the attributes
Solution 2:
My version of cp
doesn't have the --attributes-only
flag, so I worked up this. Briefly tested on simple folders, YMMV.
$> ls
version1/
version2/
$> ls -l version1/1/a
-rw-rw-r-- 1 alex alex 0 Feb 5 12:49 version1/1/a
$> ls -l version2/1/a
-rwxrwxrwx 1 alex alex 0 Feb 5 12:49 version1/1/a
$> find version1 -type f -printf '%P\n' | xargs -I {} \
chmod --reference=version1/{} version2/{}
$> ls -l version2/1/a
-rw-rw-r-- 1 alex alex 0 Feb 5 12:49 version1/1/a
Solution 3:
You can, but i don't think in an "automated way" !
GNU chown and GNU chmod have a --reference=RFILE
parameter you can use.
chown --reference=RFILE yourfile
chmod --reference=RFILE yourfile
It uses RFILE
settings (permissions, owner, group, etc..) and copies them to yourfile
.
the manual explains in more detail.