bash: cd в последний измененный дочерний каталог


10

Интересно, есть ли простой и / или переносимый способ сказать «перейти на последний измененный дочерний каталог». Я могу использовать ls и awk, но, возможно, есть лучший способ.

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

Мне нужно выполнить команду в каталоге «выходных файлов» с сотнями подкаталогов и 99% времени я хочу перейти в последний измененный каталог. Я не знаю, какие названия каталогов будут заранее.


1
Почему нет cd $(ls -v1td */ | head -1)?
Пабло Кастеллацци

Хорошая мысль ... Я не так хорошо знаком с опциями ls, как следовало бы ...
twblamer

Ответы:


13

Предполагая, что в ваших каталогах нет непечатаемых символов:

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

(обратите внимание, что он также будет учитывать символические ссылки на каталоги).

Если вы не против перейти на zsh:

cd ./*(/om[1])

Или включить символические ссылки на каталоги, как в первом примере:

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

0

Наслаждаться.

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

Зачем ставить имя каталога в буфер обмена? Кроме того, что происходит, если имя каталога содержит пробел - довольно распространенное явление в наши дни.
Ройма

Использование буфера обмена облегчает дальнейшие операции, если вы хотите.
Джейсон Леонард

Если вы действительно хотите, вы можете добавить дополнительные поля относительно легко. вместо {print $ 9} вы можете использовать {print $ 9, $ 10, $ 11} столько, сколько пожелаете.
Джейсон Леонард

Я пересмотрел свой ответ с учетом пробелов.
Джейсон Леонард

Вот грубое объяснение: объяснение
shellhell.com/…

-1

Попробуйте эту короткую версионную команду

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

Это работает только в том случае, если последний измененный файл в текущем каталоге имеет тип каталог (или символическую ссылку на каталог), и его имя не содержит пробелов, подстановочных знаков или новых строк и не начинается с -, так что вряд ли это улучшение по сравнению с уже принятый ответ.
Стефан Шазелас
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.