我想比较远程服务器和本地目录上的文件数。我使用$ expect_out(buffer)捕获“ls somewhere/* something | wc -l”的输出,并将其存储为变量。现在我的问题是,我该如何回到我的本地计算机并对这些文件进行计数并对其进行比较。在比较之后,如果比较结果可以接受,我需要返回服务器并继续工作。使用期望捕获输出
Q
使用期望捕获输出
-1
A
回答
0
要做的最简单的事情 - 包括从正确性的角度来看 - 不是尝试拥有一个长时间运行的SSH会话,而是多个寿命较短的会话(可能使用SSH multiplexing在这些会话之间重复使用单个传输):
count_remote_files() {
local host=$1 dirname=$2 dirname_q
printf -v dirname_q '%q' "$dirname"
remote_files=$(ssh "$host" "bash -s ${dirname_q}" <<EOF
cd "$1" || exit
set -- *
if [ "$#" -eq 1 ] && [ ! -e "$1" ] && [ ! -L "$1" ]; then
echo "0"
else
echo "$#"
fi
EOF
)
}
count_local_files() {
local dirname=$1
cd "$dirname" || return
set -- *
if [ "$#" -eq 1 ] && [ ! -e "$1" ] && [ ! -L "$1" ]; then
echo "0"
else
echo "$#"
fi
}
if (($(count_remote_files "$host" "$remote_dir") ==
$(count_local_files "$local_dir"))); then
echo "File count is identical"
else
echo "File count differs"
ssh "$host" 'echo "doing something else now"'
fi
+0
哇,谢谢。这是很多工作。非常感谢。 –
0
由于您使用的期待,你可以很容易地计算使用Tcl命令在本地文件,因为期望的是建立在Tcl的顶部:
set num_local_files [llength [glob somewhere/*something]]
相关问题
- 1. 无法使用密集等级获得期望的输出
- 2. 使用左连接期望输出未输出
- 3. 使用C捕获unix输出#
- 4. 使用线程捕获进程输出
- 5. 捕获FFMPEG输出
- 6. 从NodeJS捕获输出输出
- 7. 填充ArrayList和在期望的输出
- 8. 从期望命令隐藏输出
- 9. 从期望输出不完整
- 10. 输出是不是有什么期望
- 11. 如何实现期望的输出
- 12. 期望:使用远程命令的输出
- 13. 使用期望遍历输出发送到文件
- 14. 从wget捕获python输出?
- 15. 如何捕获输出?
- 16. php:捕获命令输出
- 17. 捕获的bash输出
- 18. vmc apps捕获输出
- 19. install.packages的捕获输出
- 20. 捕获程序输出
- 21. 从adb logcat捕获输出
- 22. 从Popen捕获输出
- 23. LINQPad的捕获输出
- 24. 捕获子进程输出
- 25. 捕获log4J与grep输出
- 26. Java:捕获声音输出
- 27. RDotNet ICharacterDevice捕获输出
- 28. 捕获应用程序输出Delphi
- 29. 用org-babel捕获“diff”的输出
- 30. 从shell调用python并捕获输出
是否有你想为此使用'expect'的原因? –
我想让这个过程自动化。去服务器 - >做这个工作 - >回来检查一下 - >回去重复。我认为期望是这里的工具,对吧? –
不一定。您可以使用bash协处理器进行这项工作,也可以使用ControlMaster功能的单个SSH会话,同时在传输过程中运行多个单独的命令时打开传输器。 –