2

Когда я просматриваю логи, я использую ls -lt , чтобы увидеть самые последние измененные папки. Есть ли ярлык для ввода этой папки в одну команду? Возможно труба к другой команде добьется цели?

Например: ls -lt output:

1 -folder

2 -folder

3 -folder

Как я могу cd в папку 1 без копирования и вставки его имя?

3 ответа3

2

Если вы в порядке с запуском ls снова, вы можете использовать функцию bash:

function cd1()
{
 # cd to most recently modified directory in current path
 local c=$(ls -tF | grep '/$' | head -n 1)
 if [ ! -z "$c" ]; then cd "$c"; fi
}
1

Более уродливый способ - создать псевдоним, в котором мы перехватываем первую строку каталога *, позволяя всем строкам перейти в стандартный вывод:

alias ls-lt='ls -lt | awk --re-interval '\'' {print}; /^d/ && !first {sub( /^([^ ]+ +){8}/, ""); print $0 > "/tmp/first.tmp"; first=$0}'\''; eval cd "$(cat /tmp/first.tmp)"'

Здесь вы должны использовать ls-lt вместо ls -lt, чтобы увидеть тот же вывод и cd-ing в одно и то же время.

  • Имейте в виду, что если в вашем главном каталоге создается обычный файл, это может быть первый элемент ls -lt, который явно не является субъектом cd.
1

Вот краткая команда из всех предоставленных ответов. Ну, на самом деле, он не отвечает на реальный вопрос, так как технически вопрос состоит в том, чтобы проанализировать вывод " ls -lt ". Однако, если я предполагаю, что цель « ls -lt » - показать каталоги, отсортированные по времени, тогда этот ответ действительно достигает поставленной цели.

cd "$( ls -1Ft | grep /$ | head -1 )"

(Примечание: параметры команды "ls" и "head" содержат число, а не строчную букву L.)

Изменить: я просто добавил кавычки, потому что некоторые испытания показали, что они заставляют команду работать, даже если в имени каталога есть пробел.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .