bash: cd do ostatnio zmodyfikowanego katalogu potomnego

10

Zastanawiasz się, czy istnieje prosty i / lub przenośny sposób na powiedzenie „zmień na ostatnio zmodyfikowany katalog potomny”. Mogę używać ls i awk, ale prawdopodobnie jest lepszy sposób.

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

Muszę uruchomić polecenie w katalogu „plików wyjściowych” z setkami podkatalogów i przez 99% czasu chcę przejść do ostatnio zmienionego katalogu. Nie wiem, jakie będą nazwy katalogów.

twblamer
źródło
1
Dlaczego nie cd $(ls -v1td */ | head -1)?
Pablo Castellazzi
Dobra uwaga ... Nie jestem tak zaznajomiony z opcjami ls, jak powinienem ...
twblamer

Odpowiedzi:

13

Zakładając, że twoje katalogi nie zawierają żadnych niedrukowalnych znaków:

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

(zauważ, że weźmie również pod uwagę dowiązania symboliczne do katalogów).

Jeśli nie masz nic przeciwko przejściu na zsh:

cd ./*(/om[1])

Lub w celu włączenia dowiązań symbolicznych do katalogów, jak w pierwszym przykładzie:

cd ./*(-/om[1])
Gilles „SO- przestań być zły”
źródło
0

Cieszyć się.

cdd(){ 
  # cd into the last directory modified/created in pwd
   ls -p | grep / | tail -1 | pbcopy; str=$(pbpaste); cd $str
}
jasonleonhard
źródło
Po co umieszczać nazwę katalogu w schowku? Ponadto, co się stanie, jeśli nazwa katalogu zawiera spację - dość powszechne w dzisiejszych czasach.
roaima,
Korzystanie ze schowka pozwala na łatwość dalszych operacji, jeśli chcesz.
jasonleonhard
Jeśli naprawdę chcesz, możesz stosunkowo łatwo dodawać kolejne pola. zamiast {print 9 $} możesz użyć {print 9 $, 10 $, 11 $} tyle, ile chcesz.
jasonleonhard
Poprawiłem swoją odpowiedź, aby uwzględnić białe znaki.
jasonleonhard
Oto szorstkie wyjaśnienie: wyjaśniahell.com/...
jasonleonhard
-1

Wypróbuj to krótkie polecenie w wersji

cd $(ls -t | head -n 1)   
Swapnil Misal
źródło
Działa to tylko wtedy, gdy ostatnio zmodyfikowany plik w bieżącym katalogu jest typu katalog (lub dowiązanie symboliczne do katalogu) i jego nazwa nie zawiera pustych znaków, symboli wieloznacznych ani znaków nowej linii i nie zaczyna się od - więc nie jest to poprawa w stosunku do już zaakceptowana odpowiedź.
Stéphane Chazelas,