我有同一个目录树的两个副本。它们在两者中几乎都有相同的文件(一个版本可能有几个额外或丢失的文件)。但是,大多数文件对于两个目录都是通用的(具有相同的相对路径和所有内容)。
假设这些在目录中:
version1/
version2/
问题是 version1/ 中的权限搞砸了,我想复制 version2/ 中的权限,但不要替换 version1/ 中较新的文件。
是否有通过 bash 自动执行此操作的方法?(不一定是 bash,也可以是其他方法/编程语言)。
我有同一个目录树的两个副本。它们在两者中几乎都有相同的文件(一个版本可能有几个额外或丢失的文件)。但是,大多数文件对于两个目录都是通用的(具有相同的相对路径和所有内容)。
假设这些在目录中:
version1/
version2/
问题是 version1/ 中的权限搞砸了,我想复制 version2/ 中的权限,但不要替换 version1/ 中较新的文件。
是否有通过 bash 自动执行此操作的方法?(不一定是 bash,也可以是其他方法/编程语言)。
您应该查看以下--reference
选项chmod
:
chmod --reference version2/somefile version1/somefile
以合适的方式应用find
,xargs
你应该没问题,即类似
~/version2$ find . -type f | xargs -I {} chmod --reference {} ../version1/{}
这甚至可以递归地工作,并且对目标目录中丢失的文件很健壮(禁止No such file ...错误,可以忽略)。当然,它不会对只存在于目标目录中的文件做任何事情。
干杯,
您可以使用此脚本(它以递归方式更改权限,但为每个文件/目录单独更改)
#!/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 运行脚本
你可以试试:
chmod owner-group-other ./dir or ./file
除非权限是细粒度的并且从一个文件到另一个文件不同,否则您可以对目录执行递归 chmod 并统一权限。
有关可能有用的选项的参考,请参阅 man chmod