【问题标题】:how to access files of a directory with ssh如何使用 ssh 访问目录中的文件
【发布时间】:2013-10-18 23:55:10
【问题描述】:

我正在尝试跟踪位于远程服务器目录中的所有文件,但用户在命令行中作为第三个参数输入的文件除外。为此,在将 tail 的输出定向到另一个文件时,我需要 grep 文件类型以避免混淆。

目录是/path/to/a/file,里面有两个文件,一个叫file.log,另一个叫file.out。我想 grep .out & .log

这是我的代码:

files=$(ssh host find /path/to/a/file -type f -name '^file')

for type in $($files | awk -F'.' '{print $2}') ; do

ssh host find . /path/to/a/file -type f ! -name "$3" | xargs 0 tail -n 20 > /destination/dir/host.$type 2>/dev/null

不幸的是,这些都不起作用,我不知道为什么。

【问题讨论】:

  • 没关系,我修好了!!
  • 如果你已经解决了,那么你应该删除这个问题;它对其他人没有用处

标签: bash ssh


【解决方案1】:

您的代码有很多问题,但最大的问题是您将应该存在于第一行的参数传递给 find,并将它们传递给最后一行的 tail。具体-type f ! -name "$3"

这会让你更接近。

一步一步构建脚本。写成

ssh host find ...

并确保输出正确的文件集。现在不是。

【讨论】:

    【解决方案2】:

    这个正则表达式是问题:

    -name '^file'
    

    -name 不采用正则表达式,它采用 shell glob 模式。

    使用它应该对你有用:

    ssh host find /path/to/a/file -type f -name 'file*'
    

    更新:从该列表中排除特定文件

    ssh host find /path/to/a/file -type f \( -name 'file*' ! -name 'file.log00001' \)
    

    【讨论】:

    • 我有一个小问题,我刚刚意识到我有一个名为 file.log00001 的文件,我如何让它忽略这个文件,因为我不想 grep log00001
    • 它给了我一个语法错误!所以我想弄清楚
    • 知道了!!问题出在括号上
    • 如果此回答帮助您解决了问题,请考虑将其标记为“已接受”,以便日后遇到类似问题的用户能够轻松看到。
    猜你喜欢
    • 2021-10-28
    • 2015-07-24
    • 2012-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-11
    相关资源
    最近更新 更多