2016-08-11 47 views
0

我正在嘗試對遠程計算機執行ssh,並獲取存在於pathA(/ home/abc/mydata)中的目錄名列表,該目錄名具有上次修改過的任何文件1小時。Unix命令通過遠程主機獲取目錄列表

目錄: -

/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 

有些幫助會很大。

回答

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參數ssh只有在需要彩色ls輸出時才需要。
  • ls -ldi ...的輸出與find ... -ls的輸出略有不同,但我猜測它會這樣做。
  • 第二級find的返回值在這裏使用太模糊。相反,我們只是測試它的輸出是否爲非空。
+0

它列出了深度1中存在的所有目錄,而不是基於時間(-ctime或-mtime)包含修改文件的目錄。任何解決這個問題? – learner

+0

我不明白:在OP中,你說你想輸出'a'和'b',而不是'a'和'b/b2'。 –

+0

是的,但是你的腳本將輸出作爲a,b,c而不是a,b即。 mydata文件夾下的所有目錄都顯示爲輸出。 – learner