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.


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

0

Cieszyć się.

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

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)   

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,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.