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.


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])

0

Prendre plaisir.

cdd(){ 
  # cd into the last directory modified/created in pwd
   ls -p | grep / | tail -1 | pbcopy; str=$(pbpaste); cd $str
}

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)   

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.