Unix命令获取远程主机上的目录列表

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unix命令获取远程主机上的目录列表相关的知识,希望对你有一定的参考价值。

我正在尝试对远程计算机执行ssh并获取pathA(/ home / abc / mydata)中存在的目录名列表,该列表包含在过去1小时内已修改的任何文件。

目录:-

/home/abc/mydata
    -> Directory a
        ->file1   last modified 1 hour back
        ->file2   last modified 1 year back
        ->file3   last modified 1 day back
    -> Directory b
        ->file11  last modified 1 year back
        ->file22  last modified 1 year back
        ->file33  last modified 1 year back
        ->Directory b1
          ->fileb1-11 last modified 1 hour back
    -> Directory c
        ->file111  last modified 1 year back
        ->file222  last modified 1 year back
        ->file333  last modified 1 year back

我想把输出作为

   a  => as it has 1 file which was modified 1 hour back(file1)
   b  => as it has 1 file under sub directory of directory b (fileb1-11)

我正在尝试以下命令

         ssh "host" -t "find /home/abc/mydata -type d  -mmin -60 -ls"

但我希望最终输出为

  a
  b

但是此命令也将子目录列为输出。

  a
  b
  b1

一些帮助将是伟大的。

答案

尝试:

ssh "$host" '
find /home/abc/mydata -mindepth 1 -maxdepth 1 -type d |
while read -r d; do
    [ "$(find "$d" -mmin -1 -type f -print -quit 2>/dev/null)" ] &&
    ls -ldi "$d"
done
'

笔记:

  • 使用mindepth / maxdepth,第一个find将只看到1级。
  • 一个单独的find将在每个子文件夹中查看最近修改的常规文件(-type f)。如果其他最近修改的文件类型(子目录/套接字/符号链接)应该触发输出,请删除-type f
  • -tssh参数只有在你想要彩色化的ls输出时才是必要的。
  • ls -ldi ...的输出与find ... -ls略有不同,但我猜它会这样做。
  • 第二级find的返回值太模糊了,不能在这里使用。相反,我们只是测试它的输出是否非空。
另一答案

原帖几乎是正确的。这对我有用(使用Mac BSD):

ssh <user>@<host> -t "find /home/abc/mydata -mindepth 1 -maxdepth 1 -mmin -60 -type d"
  • 需要mindepth arg来避免打印源目录/ home / abc / mydata。
  • 需要maxdepth arg,因此我们不打印第一级下面的子目录。
  • 消除了-ls arg,因为它提供了有关目录的更多详细信息(例如权限),并且可能导致提取路径名的问题。

我还建议任何需要更复杂查找的人使用变量单独构建它以使调试更容易。这是一个脚本:

#!/bin/bash
user=<username>
host=<hostname>
path=/home/abc/mydata
myfind="find ${path} -mindepth 1 -maxdepth 1 -mmin -60 -type d"
ssh $user@$host -t $myfind

以上是关于Unix命令获取远程主机上的目录列表的主要内容,如果未能解决你的问题,请参考以下文章

Java 实现 ssh命令 登录主机执行shell命令

检查远程主机上一个端口的状态[关闭]

使用 netstat 远程获取基于 unix 的操作系统上的所有进程连接需要哪些权限

Linux挂载远程目录

讲清楚,说明白!使用SSH安全管理远程主机

Linux系统上传文件与下载文件命令