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

10

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

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

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

twblamer
источник
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
}
jasonleonhard
источник
Зачем ставить имя каталога в буфер обмена? Кроме того, что происходит, если имя каталога содержит пробел - довольно распространенное явление в наши дни.
Ройма
Использование буфера обмена облегчает дальнейшие операции, если вы хотите.
Джейсон Леонард
Если вы действительно хотите, вы можете добавить дополнительные поля относительно легко. вместо {print $ 9} вы можете использовать {print $ 9, $ 10, $ 11} столько, сколько пожелаете.
Джейсон Леонард
Я пересмотрел свой ответ с учетом пробелов.
Джейсон Леонард
Вот грубое объяснение: объяснение
shellhell.com/…
-1

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

cd $(ls -t | head -n 1)   
Свапнил Мисал
источник
Это работает только в том случае, если последний измененный файл в текущем каталоге имеет тип каталог (или символическую ссылку на каталог), и его имя не содержит пробелов, подстановочных знаков или новых строк и не начинается с -, так что вряд ли это улучшение по сравнению с уже принятый ответ.
Стефан Шазелас