我有Machine-A和Machine-B,两者都是Ubuntu服务器。 现在,我想使用ssh列出Machine-B上的所有文件。 我想将结果返回到文本文件中,以便我可以分析结果并使用scp复制所需的文件。
ssh my_user_name@192.168.150.4 'bash -s tree /f'
ssh my_user_name@192.168.150.4 'bash -s ls -LR'
现在,此命令没有给出我想要的结果。 任何人都可以提供帮助,因此我可以使用ssh列出远程计算机上的所有文件,并以文本文件的形式返回输出。
我正在使用ls -LR列出文件,并使用SSH进行远程脚本执行。
从答案中,我致力于解决我的问题,并更新问题以使其符合一个小要求。
我通过此命令ssh my_user_name@192.168.150.4 ls /something/sub > output.txt获得了文件列表
但是我想要所有文件的md5sum而不是名称,因为2个文件名可能会匹配。所以有什么办法列出所有文件并返回所有文件的所有md5sum并返回到output.txt文件。
@Inian不,我解决了清单问题,md5没有解决
表示不存在这样的文件或目录
@Inian我用您的更新更改了我的脚本
是的,我做到了,它确实存在。
@Inian还是一样的错误。
现在没有错误,但是output.txt文件只是空的。
@Inian如果我们删除> output.txt,它将起作用
然后,您可以将输出重定向到主文件夹> ~md5output.txt中的文件,现在查看内容吗? 并且您是否使用scp将文件复制回去?
您可以接受答案(我的答案左边的对勾)以将其标记为已解决。
将文件列表复制到计算机B中的有效路径,然后使用scp将其复制回计算机A。
ssh username@machineB 'ls -LR /path/to/dir > ~/fileList'
要返回目录中所有文件的md5sum,请使用find作为
ssh username@machineB 'find /path/to/dir -type f -exec md5sum {} \; > ~/md5sum_fileList'
现在,使用glob模式将文件复制回计算机A,以复制具有fileList模式的文件
scp username@machineB:~/*fileList* username@machineA:~/
如果将> md5sum_fileList放在引号中,则会在远程主机上创建文件。 据我了解,OP希望在本地主机中获得结果。
@AlexisWilke:完全同意您的意见,OP希望在远程计算机上创建文件,然后使用scp将其复制回本地
您需要做的就是指定命令,而不使用" bash"。您的默认外壳程序将在远程设备上用于执行命令。
ssh remote-host command
要将ls命令的输出保存到文件中,可以简单地使用通常的shell重定向:
ssh remote-host command > output.txt
万一您在一行上以多个文件名结尾,则可能需要在ls命令行上使用-1。另外,请记住,如果文件名包含空格,则需要在Shell脚本中使用引号来支持这些引号。
要连续运行多个命令,尽管输出不会那么容易管理,但是您可以使用引号和带有分号的单独命令(例如),如下所示:
ssh remote-host"command1; command2; command3"> output.txt
关于md5sum,可以使用find命令和md5sum对目录中的所有文件运行该文件:
ssh remote-host"find . -type f -exec md5sum {} \;"> output.txt
将路径(在示例中为.)更改为适合您的路径。
我可以使它成为多个命令,例如cd somethingsub ls。哪个命令移动到另一个目录然后列出文件?
@SaiKiran:只需将路径作为命令的一部分传递即可,即ls -LR somethingsub > ~fileList
@Inian在这里,我在文件夹中有几个文件,因此我可以传递一些东西来返回此文件的md5总和md5sum ls somethinsub
@SaiKiran:现在这完全是一个新要求。 您可以根据所有要求更新问题吗? 让人们一口气回答?