bash: cd vers le dernier répertoire enfant modifié

10

Vous vous demandez s'il existe un moyen simple et / ou portable de dire «passez au répertoire enfant le plus récemment modifié». Je peux utiliser ls et awk mais il y a probablement une meilleure façon.

cd $( ls -ltrd */ | tail -1 | awk '{ print $8 }' )

Je dois exécuter une commande dans un répertoire "fichiers de sortie" avec des centaines de sous-répertoires et 99% du temps, je veux aller dans le répertoire le plus récemment modifié. Je ne sais pas à l'avance quels seront les noms des répertoires.

twblamer
la source
1
Pourquoi pas cd $(ls -v1td */ | head -1)?
Pablo Castellazzi
Bon point ... Je ne suis pas aussi familier avec les options ls que je devrais l'être ...
twblamer

Réponses:

13

En supposant que vos répertoires ne contiennent aucun caractère non imprimable:

cd  "$(\ls -1dt ./*/ | head -n 1)"

(notez qu'il prendra également en compte les liens symboliques vers les répertoires).

Si cela ne vous dérange pas de passer à zsh:

cd ./*(/om[1])

Ou pour inclure des liens symboliques vers des répertoires comme dans le premier exemple:

cd ./*(-/om[1])
Gilles 'SO- arrête d'être méchant'
la source
0

Prendre plaisir.

cdd(){ 
  # cd into the last directory modified/created in pwd
   ls -p | grep / | tail -1 | pbcopy; str=$(pbpaste); cd $str
}
jasonleonhard
la source
Pourquoi mettre le nom du répertoire dans le presse-papiers? En outre, ee ce qui se passe si le nom du répertoire contient un espace - une occurrence assez courante de nos jours.
roaima
L'utilisation du presse-papiers permet de faciliter d'autres opérations si vous le souhaitez.
jasonleonhard
Si vous le souhaitez, vous pouvez ajouter d'autres champs relativement facilement. au lieu de {print $ 9}, vous pouvez utiliser {print $ 9, $ 10, $ 11} autant que vous le souhaitez.
jasonleonhard
J'ai révisé ma réponse pour tenir compte des espaces blancs.
jasonleonhard
Voici une explication approximative: expliquehell.com/…
jasonleonhard
-1

Essayez cette courte commande versionnée

cd $(ls -t | head -n 1)   
Swapnil Misal
la source
Cela ne fonctionne que si le fichier modifié le plus récemment dans le répertoire actuel est de type répertoire (ou lien symbolique vers le répertoire) et que son nom ne contient pas de blancs, de caractères génériques ou de nouvelles lignes et ne commence pas par -, ce n'est donc guère une amélioration par rapport à la réponse déjà acceptée.
Stéphane Chazelas