复制文件权限,但不复制 Unix 中的文件

Mar*_*iga 14 unix copying unix-shell file-permissions

(来自:https : //stackoverflow.com/questions/15245144/copy-file-permissions-but-not-files,因为离题而关闭)

我有两个相同目录树的副本。它们几乎具有相同的文件(一个版本可能有几个额外的或丢失的文件)。但是,大多数文件对于这两个目录都是通用的(具有相同的相对路径和所有内容)。

假设这些在目录中:

version1/
version2/
Run Code Online (Sandbox Code Playgroud)

问题是 version1/ 中的权限搞砸了,我想从 version2/ 复制权限,但不要替换 version1/ 中较新的文件。

是否有通过 shell 命令或脚本自动执行此操作的方法?

Tom*_*Aac 15

GNU cp--attributes-onlycoreutils 8.6 开始就知道这个标志

--attributes-only 不复制文件数据,只复制属性


she*_*n89 14

我的版本cp没有--attributes-only标志,所以我解决了这个问题。在简单文件夹 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
Run Code Online (Sandbox Code Playgroud)


小智 5

你可以,但我不认为“自动化的方式”!

GNU chown 和 GNU chmod 有一个--reference=RFILE您可以使用的参数。

chown --reference=RFILE yourfile
chmod --reference=RFILE yourfile
Run Code Online (Sandbox Code Playgroud)

它使用RFILE设置(权限、所有者、组等)并将它们复制到yourfile.

手册有更详细的解释。


Mar*_*iga 0

就我而言,我通过使用“stat”命令与“find”和“vi”来创建应用权限的脚本来解决。

cd version1/
find . -exec stat -c '%a %n' "{}" \; > setPerm.sh
vi setPerm.sh
Run Code Online (Sandbox Code Playgroud)

在“vi”中,我将“chmod”命令插入到所有行中:%s/^/chmod /g 我将脚本复制到version2/目录中并执行它。

其他解决方案似乎有效,但我没有测试它们以防万一。