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.