Linux shell脚本查找5个最新的.jar文件,将它们呈现给用户,获取输入并使用ssh进行复制

Linux shell脚本查找5个最新的.jar文件,将它们呈现给用户,获取输入并使用ssh进行复制,linux,bash,shell,ssh,Linux,Bash,Shell,Ssh,我正在尝试创建一个执行以下任务的shell脚本: 从Linux机箱A连接到Linux机箱B 获取最新5个prop.jar文件的列表 将此列表以序列号1到5呈现给用户,并要求用户输入 用户可以输入1到5之间的任意数字。对于任何其他数字,应显示一个错误 一旦用户输入了正确的数字,这个jar文件应该从B复制到a 由于我对shell脚本还不熟悉,所以速度有点慢。我学到的是: 要从框A连接到框B,我将使用ssh 我从shell脚本运行了一个命令:sshuser@hostfind-name'prop*.ja

我正在尝试创建一个执行以下任务的shell脚本:

从Linux机箱A连接到Linux机箱B 获取最新5个prop.jar文件的列表 将此列表以序列号1到5呈现给用户,并要求用户输入 用户可以输入1到5之间的任意数字。对于任何其他数字,应显示一个错误 一旦用户输入了正确的数字,这个jar文件应该从B复制到a 由于我对shell脚本还不熟悉,所以速度有点慢。我学到的是:

要从框A连接到框B,我将使用ssh 我从shell脚本运行了一个命令:sshuser@hostfind-name'prop*.jar'此命令为我提供了所需文件的列表 但是,当我尝试命令时: sshuser@host查找-name'prop*.jar'-printf“%C”@ %p\n'|排序-rn |头-n 5

我得到错误-查找:路径必须在表达式之前:%pn

我哪里做错了。我在谷歌上搜索并尝试了许多变体,但shell脚本仍然抛出了这个错误。我不会问其他步骤的答案,因为我还没有尝试过它们。但毫无疑问,这一步让我筋疲力尽

编辑: 我刚刚想好了如何从远程框B复制到框A:

scp-o StrictHostKeyChecking=no[[user@]从主机:]源文件[[user@]到主机:][目标文件]
但最初的问题仍然存在。。。。有什么帮助吗:

查找方法本可以奏效;只是命令行的用法是错误的——它缺少第一个谓词arg-name之前的目录路径

你有:

find -name 'prop*.jar' -printf '%C@ %p\n'
您需要:

find . -name 'prop*.jar' -printf '%C@ %p\n'

正如其他人在评论中指出的,您可能仍然需要对所有内容进行双重转义。

引用您通过ssh发送的整个命令。@Wrikken我刚刚将该命令置于块引号中以突出显示它。这是我使用的整个命令,具有正确的用户和主机名。它首先问我密码。在我输入密码后,它会抛出上面提到的错误user@host查找-name'prop*.jar'-printf'%C@%p\n'| sort-rn | head-n5。请注意,您的命令行解释引号、管道等,因此-printf“%C@%p\n”中的任何引号都将丢失,并且您的排序和标头当前发生在您的方框上,而不是连接到的方框上,因此您需要告诉它不要这样做。@Wrikken谢谢您Wrikken。成功了!!!!现在唯一的困惑是,为什么在我使用prop*.jar命令之前它不带引号就可以工作呢?因此:prop*.jar不是一个问题,除非您的cwd中有一个本地文件与它匹配,比如本地的take-instance-property.jar,在这种情况下,不是prop*.jar被发送到服务器,而是用本地文件名替换。这里的实际问题是-printf。在-print'%C@%p\n'的情况下,整个'%C@%p\n'是该选项的值,可以工作。但是,由于您的本地命令行对其进行了解释,-printf“%C@%p\n”变为-printf%C@%p\n,而不带',因此find将%C@解释为格式,将%p\n解释为错误位置上的路径。