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

Unix command to get list of directories over remote host

我正在尝试对远程计算机执行 ssh 并获取路径 A(/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)。如果其他最近修改的文件类型 (subdirectories/sockets/symlinks) 应触发输出,请删除 -type f.
  • ssh-t 参数仅在您想要彩色 ls 输出时才需要。
  • ls -ldi ... 的输出与 find ... -ls 的输出略有不同,但我猜它会。
  • 第二层find的return值太模糊了,不能在这里使用。相反,我们只是简单地测试它的输出是否为空。

原来的 post 看起来几乎是正确的。这是对我有用的(使用 Mac BSD):

ssh <user>@<host> -t "find /home/abc/mydata -mindepth 1 -maxdepth 1 -mmin -60 -type d"
  • 需要 mindepth arg 以避免打印源目录 /home/abc/mydata。
  • 需要 maxdepth 参数,因此我们不打印子目录 低于一级。

  • 消除了 -ls 参数,因为它提供了有关的更多详细信息 目录(例如权限),并可能导致问题 提取路径名。

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

#!/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