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

时间:2016-08-11 18:38:33

标签: shell unix ssh find ls

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

目录: -

    FileOutputStream outStream = null;
    File sdCard = Environment.getExternalStorageDirectory();
    File dir = new File(sdCard.getAbsolutePath() + "/camtest");
    dir.mkdirs();
    String fileName = String.format("%d.jpg", System.currentTimeMillis());
    File outFile = new File(dir, fileName);
    outStream = new FileOutputStream(outFile);
    bitmap.compress(Bitmap.CompressFormat.JPEG, 100, outStream);
    outStream.flush();
    outStream.close();
    refreshGallery(outFile);

我想把输出作为

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

我正在尝试以下命令

/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"

一些帮助会很棒。

2 个答案:

答案 0 :(得分:0)

尝试:

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输出时才需要sshls的参数。
  • ls -ldi ...的输出与find ... -ls略有不同,但我猜它会这样做。
  • 第二级find的返回值太模糊,无法在此处使用。相反,我们只是测试它的输出是否为非空。

答案 1 :(得分:0)

原始帖子似乎几乎是正确的。这是对我有用的(对于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