用于获取远程主机目录列表的 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
我正在尝试对远程计算机执行 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