我有一个存储在文本文件中的文件列表(文件/文件夹的绝对路径)。我只需要从一台机器复制权限、用户:组属性(所有这些文件的),并在另一台机器上的同一组文件上应用相同的设置。
我能想到的一种方法是一个接一个地手动完成,在一台机器上检查属性,在另一台机器逐个文件地执行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'