如何在linux中从一台机器上只复制文件权限和user:group,并将其应用于另一台机器



我有一个存储在文本文件中的文件列表(文件/文件夹的绝对路径)。我只需要从一台机器复制权限、用户:组属性(所有这些文件的),并在另一台机器上的同一组文件上应用相同的设置。

我能想到的一种方法是一个接一个地手动完成,在一台机器上检查属性,在另一台机器逐个文件地执行chmod/choun,但这似乎是一项乏味的任务。

你知道如何实现自动化吗?

edit:我只是想明确一点,我不需要来自源机器的这些文件的数据,因为源机器中的数据不同。目标机器包含更新的数据,我现在只需要从源机器获得文件/文件夹权限和用户:组。

这个怎么样?

#!/bin/bash
user="user"
host="remote_host"
while read file
do
    permission=$(stat -c %a $file) # retrieve permission
    owner=$(stat -c %U $file) # retrieve owner
    group=$(stat -c %G $file) # retrieve group
    # just for debugging
    echo "$file@local: p = $permission, o = $owner, g = $group"
    # copy the permission
    ssh $user@$host "chmod $permission $file" < /dev/null 
    # copy both owner and group
    ssh $user@$host "chown $owner:$group $file" < /dev/null
done < list.txt

我假设文件列表保存在"list.txt"中。

此外,您应该根据您的设置设置变量"user"one_answers"host"。

我建议将ssh配置为"自动登录"。否则,您应该插入每个循环两次密码。这里有一个很好的教程,可以在没有密码的情况下进行SSH登录。

另一个只建立一个ssh连接并使用递归选项的解决方案目录(如评论中所要求的)如下:

#!/bin/bash
user="user"
host="remote_host"
cat list.txt | xargs stat -c "%n %a %U:%G" | ssh $user@$host '
while read file chmod_par chown_par 
do
    # $file contains %n
    # $chmod_par contains %a
    # $chown_par contains %U:%G
    if [ -d $file ]; then
            chmod -R $chmod_par $file
            chown -R $chown_par $file
    else
            chmod $chmod_par $file
            chown $chown_par $file  
    fi
done'

相关内容

最新更新