bash: cd nella directory figlio modificata più di recente


10

Mi chiedo se esiste un modo semplice e / o portatile per dire "passa alla directory figlio modificata più di recente". Posso usare ls e awk ma probabilmente c'è un modo migliore.

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

Devo eseguire un comando in una directory "file di output" con centinaia di sottodirectory e il 99% delle volte che voglio andare alla directory modificata più di recente. Non so quali saranno i nomi delle directory in anticipo.


1
Perché no cd $(ls -v1td */ | head -1)?
— Pablo Castellazzi,

Buon punto ... Non ho familiarità con le opzioni come dovrei essere ...
— twblamer

Risposte:


13

Supponendo che le tue directory non contengano caratteri non stampabili:

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

(nota che prenderà in considerazione anche i collegamenti simbolici alle directory).

Se non ti dispiace passare a zsh:

cd ./*(/om[1])

O per includere collegamenti simbolici alle directory come nel primo esempio:

cd ./*(-/om[1])

0

Godere.

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

Perché inserire il nome della directory negli Appunti? Inoltre, vedi cosa succede se il nome della directory contiene uno spazio - un evento abbastanza comune in questi giorni.
— roaima,

L'uso degli Appunti consente di facilitare ulteriori operazioni, se lo si desidera.
— jasonleonhard,

Se lo desideri, puoi aggiungere altri campi in modo relativamente semplice. invece di {print $ 9} puoi usare {print $ 9, $ 10, $ 11} quante ne desideri.
— jasonleonhard,

Ho modificato la mia risposta per tenere conto degli spazi bianchi.
— jasonleonhard,

Ecco una spiegazione di massima: explainshell.com/...
— jasonleonhard

-1

Prova questo comando con versione breve

cd $(ls -t | head -n 1)   

Funziona solo se il file modificato più di recente nella directory corrente è di tipo directory (o link simbolico alla directory) e il suo nome non contiene spazi vuoti o caratteri jolly o newline e non inizia con, quindi non è certo un miglioramento rispetto al risposta già accettata.
— Stéphane Chazelas,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.