我正在尝试对远程计算机执行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
。-t
的ssh
参数只有在你想要彩色化的ls
输出时才是必要的。ls -ldi ...
的输出与find ... -ls
略有不同,但我猜它会这样做。find
的返回值太模糊了,不能在这里使用。相反,我们只是测试它的输出是否非空。原帖几乎是正确的。这对我有用(使用Mac BSD):
ssh <user>@<host> -t "find /home/abc/mydata -mindepth 1 -maxdepth 1 -mmin -60 -type d"
我还建议任何需要更复杂查找的人使用变量单独构建它以使调试更容易。这是一个脚本:
#!/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