我希望能够将参数传递给远程机器。 在这个脚本中,我想根据权限在远程目标机器上chmod一些文件,我在源机器上的相同文件中找到这些文件。
如果目标计算机是我运行脚本的同一台计算机(chmod $ perm $ path部分代码可以工作),它对我有用。 如果我尝试在远程计算机上chmod文件,它不起作用(ssh root @“$ {destnode}”chmod $ perm $ path)。
还有另一个问题。此脚本无法处理文件/文件夹名称中的空格。任何人都可以帮我解决这个问题吗?
#!/bin/bash
sourcenode=$1
destnode=$2
path1=/root/test
tmp=/tmp/file-list
ssh root@"${sourcenode}" "find ${path1} -exec stat -c '%a %n' {} \; " > $tmp
cat $tmp | ssh root@"${destnode}" 'cat - > /tmp/file-list '
ssh root@"${destnode}" cat $tmp |
while read perm path
do
#ssh root@"${destnode}" chmod $perm $path
chmod $perm $path
done
答案 0 :(得分:0)
这里的问题是你尝试直接通过ssh运行bash代码。您无需将文件列表复制到目标,因为您在运行脚本的主机上拥有所需的所有信息。
关于文件名空间问题,我用sed处理它,用':'替换权限和文件之间的空格,然后在while循环中设置适当的IFS(字段分隔符):
#!/bin/bash
sourcenode=$1
destnode=$2
path1=/root/test
tmp=/tmp/file-list
ssh root@$sourcenode \
"find $path1 -exec stat -c '%a %n' {} \; | sed -e 's/^\([0-9]*\) \(.*\)$/\1:\2/'" > $tmp
while IFS=$':' read perm path; do
ssh root@$destnode chmod $perm $path
done < $tmp