RedHat 6 通过 ssh、rsync 和 find 复制文件

RedHat 6 通过 ssh、rsync 和 find 复制文件

我正在尝试通过这种方式从远程服务器复制文件:

transferFiles() {
    for FILE in `ssh $USERNAME@$HOSTNAME find "${DIR}" -type f -mtime -1 -name "*log*" 2>/dev/null` ; do
        rsync -zR $USERNAME@$HOSTNAME:$FILE "${DIRII}"
    done
}

我想复制包含“log”的所有文件。

不幸的是,有些东西不起作用,我怀疑问题出在引号上,我尝试了很多解决方案,但仍然一无所获。

抱歉我说得不够详细。我试图在echo $FILE循环内部检查是否有东西被发送到这个变量。 echo 没有显示任何内容,这就是为什么我假设问题出在第一行。另外我试图直接执行

ssh $USERNAME@$HOSTNAME find "${DIR}" -type f -mtime -1 -name "*log*"| less

但输出为空。在这种情况下,解决方案是在单引号内插入 find

ssh $USERNAME@$HOSTNAME 'find "${DIR}" -type f -mtime -1 -name "*log*"'| less

这个正在工作。但现在我的问题是如何将其应用到脚本中。我不能做这样的事情:

transferFiles() {
    for FILE in `ssh $USERNAME@$HOSTNAME 'find "${DIR}" -type f -mtime -1 -name "*log*"' 2>/dev/null` ; do
        rsync -zR $USERNAME@$HOSTNAME:$FILE "${DIRII}"
    done
}

我还尝试了双引号,除了 ssh 和 find 的单引号。交替引用" ' ' "也不能解决这个问题。

答案1

所以,最后我找到了解决方案。问题是缺少反斜杠 \ 在-name "*log*"' 这种情况下,整个查找的单引号是不必要的。

ssh $USERNAME@$HOSTNAME find "${DIR}" -type f -mtime -1 -name "\*log*"| less

这是正常工作的。

相关内容