2016-08-11 5 views
0

J'essaie de faire ssh sur une machine distante et obtenir la liste des noms de répertoires présents sur pathA (/ home/abc/mydata) qui a un fichier qui a été modifié en dernier 1 heure.Commande Unix pour obtenir la liste des répertoires sur l'hôte distant

Répertoire: -

/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 

Je suis en train d'obtenir la sortie comme

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) 

Je suis en train de la commande suivante

  ssh "host" -t "find /home/abc/mydata -type d -mmin -60 -ls" 

mais je veux la sortie finale

a 
    b 

mais cette commande répertorie également les sous-répertoires comme sortie.

a 
    b 
    b1 

Un peu d'aide sera formidable.

Répondre

0

Essayez:

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 
' 

Notes:

  • Avec mindepth/maxdepth, le premier find regardera seulement au niveau 1.
  • Un find séparé regardera à l'intérieur de chaque sous-dossier pour régulier fichiers (-type f) récemment modifiés. Si d'autres types de fichiers récemment modifiés (sous-répertoires/sockets/liens symboliques) doivent déclencher la sortie, supprimez -type f.
  • Le paramètre -t à ssh n'est nécessaire que si vous souhaitez une sortie colorée ls.
  • La sortie de ls -ldi ... est légèrement différente de celle de find ... -ls, mais je suppose que cela fonctionnera.
  • La valeur de retour du deuxième niveau find est trop vague pour être utilisée ici. Au lieu de cela, nous testons simplement si sa sortie est non vide.
+0

Il répertorie tous les répertoires présents en profondeur 1 et non ceux qui contiennent des fichiers modifiés en fonction de l'heure (-ctime ou -mtime). Une solution pour cela? – learner

+0

Je ne comprends pas: dans OP vous avez dit que vous vouliez les sorties 'a' et' b', pas 'a' et' b/b2'. –

+0

oui mais votre script donne un résultat en a, b, c et non a, b ie. Tous les répertoires sous le dossier mydata sont affichés en sortie. – learner