复制文件权限,但不复制文件[关闭]

Posted

技术标签:

【中文标题】复制文件权限,但不复制文件[关闭]【英文标题】:Copy file permissions, but not files [closed] 【发布时间】:2013-02-21 02:44:02 【问题描述】:

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

假设这些在目录中:

version1/
version2/

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

是否有通过 bash 自动执行此操作的方法? (不一定是 bash,也可以是其他方法/编程语言)。

【问题讨论】:

我在ServerFault中创建了一个与该主题相关的新问题:Copy file permissions, but not files in Unix 我和其他人一样认为这是一个很好的问题,问题和答案的 100 多票就证明了这一点。如果您无法重新打开此问题,至少将其迁移到 Unix 和 Linux,这样会更受欢迎。我在这里没有足够的代表来提名重新开放,但希望 OP 可以。 【参考方案1】:

您应该查看chmod--reference 选项:

chmod --reference version2/somefile version1/somefile

以合适的方式应用findxargs,你应该没问题,即类似

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

这甚至可以递归地工作,并且对于目标目录中丢失的文件很健壮(除了 No such file ... 错误,可以忽略)。当然它不会对只存在于目标目录中的文件做任何事情。

干杯,

【讨论】:

只是为了确认,在上面的命令中,它正在更改版本 2 以匹配版本 1,反之亦然正确吗?最后,这对丢失文件很有效吗? 否和否。 详细来说,它会将权限从当前目录复制到版本 1,如果目标目录中没有匹配的文件,我不确定 xargs 是否会继续 - 您应该在实时运行之前进行测试FS。 请注意,--reference 是 GNU 功能,而不是 POSIX,因此 chmod 可能并非在所有系统中都有。 我可以通过从 live CD 复制权限来保存 Fedora 安装。 9个月后仍然有效。谢谢!【参考方案2】:

您可以使用此脚本(它会递归地更改每个文件/目录的权限)

#!/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

使用参数 version2 version1 运行脚本

【讨论】:

我知道这是五年前的事,但我想知道您是否还记得在发布它时测试它。我想试一试,但不想在没有事先确认的情况下按原样复制、粘贴和运行它。【参考方案3】:

你可以试试:

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

除非权限细化并且从一个文件到另一个文件不同,否则您可以对目录执行递归 chmod 并统一权限。

请参阅 man chmod 以获取有关可能有用的选项的参考

【讨论】:

以上是关于复制文件权限,但不复制文件[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

linux命令 cp 递归复制和带权限复制

xcopy复制文件并保留权限

权限被拒绝错误开发C++ [关闭]

使用 sudo 权限的 Qt 复制文件

win8超级管理员权限怎么开启和关闭

Linux:只复制文件权限和所有者