2016-08-11 3 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

Try:

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 ie. Все каталоги в папке mydata отображаются как выходные. – learner