cd в последний буквенно-цифровой каталог

У меня есть это содержимое каталога:

введите описание изображения здесь

Как вы можете видеть, имена каталогов – это только временные метки – вообще, когда я являюсь каталогом верхнего уровня, я обычно хочу открыть самый последний каталог, который является самым большим значением метки времени, что означает, что он должен быть отсортирован последним (правильно?). ,

Есть ли хороший способ быстро записать cd в последний каталог? Могу ли я предположить, что они будут отсортированы по временной шкале ОС? Иначе грязный способ сделать это – скопировать значение самой большой метки времени, а затем запустить «$ cd 1453775108178».

Обе команды ls и подстановочные знаки, такие как * имена файлов списка в лексикографических ордерах. Для имен файлов, состоящих только из цифр, это соответствует числовому порядку, только если все имена файлов имеют одинаковое количество цифр. С тех пор ваши имена файлов выглядят как миллисекунды; до тех пор, пока время между 2001-09-09 01:46:40 и 2286-11-20 17: 46: 39.999, лексикографический порядок в порядке для вас.

В zsh вы можете использовать квалификатор [-1] glob, чтобы взять последнее совпадение.

 cd *([-1]) 

Это можно уточнить несколькими способами, такими как

  • cd *(/[-1]) чтобы гарантировать соответствие только каталогов (в случае наличия других типов файлов).
  • cd *(-/[-1]) чтобы также включать символические ссылки в каталоги.
  • cd <->([-1]) чтобы гарантировать соответствие только имен, состоящих из цифр только¹.
  • cd <->(/n[-1]) чтобы отсортировать эти имена в числовом, а не лексикографическом порядке (например, 10 отсортированы после 9 а не сразу после 1 ).

Другой подход в zsh состоит в том, чтобы использовать завершение. Это более или менее прямолинейно в зависимости от текущих настроек завершения. Если вы установите параметр glob_complete (что я делаю) и glob_complete reverse-menu-complete с ключом, скажем Shift + Tab , который можно сделать с помощью следующего кода в вашем .zshrc :

 setopt glob_complete bindkey '\e\t' reverse-menu-complete 

то вы можете ввести cd * Shift + Tab и * будет заменен последним совпадением.

В других оболочках нет такой приятной функциональности. Вы можете сделать небольшую функцию.

 cdlast () { set ./*/ shift "$(($#-1))" cd "$1" } 

С дополнительным указателем - , но с учетом того, что имена файлов, начинающиеся с - являются проблематичными, надеюсь, вы их не используете.

Вы можете создать псевдоним или функцию в файле .bashrc – например:

 alias lcd="cd $( ls -1 | tail -1 )" # or use sort if you can't rely on timestamps 

ИЛИ

 lcd() { cd $( ls -1 | tail -1 ) ; } 

Вы, очевидно, могли бы добавить гораздо больше умений.

Кроме того, если у вас есть доступ, я бы создал символическую ссылку, называемую «последней», которая укажет на каталог. Это будет обновление с использованием cron и т. Д. (Предпочтительно с использованием того же механизма, который создает эти каталоги).

Если у вас есть только созданные каталоги, вы можете найти последний файл / dir, используя –

 ls -tr1 |tail -1 to cd to it -- cd $(ls -tr1 | tail -1) 

Если у вас есть файлы и директории, требуется больше работы –

 cd $(ls -ltr |grep ^d |tail -1 | awk '{print $9}') 

другие параметры – найти с mtime (вам нужно знать окно, когда каталог был создан для фильтрации). Поскольку все эти команды могут занять очень много времени, если большой размер файла (100k + файлов), лучший способ сделать это – создать один файл, который содержит последний созданный dir, и использует это для cd для последнего каталога.

Если у вас есть контроль над процессом, который создает каталоги, возможно, его можно будет адаптировать, чтобы он всегда записывал символическую ссылку, называемую, скажем, latest которая указывает на новейший каталог.

Это то, что я делаю в сценарии, который извлекает фотографии с моей цифровой камеры, и это работает очень хорошо для меня:

 $ ls -loghd pictures/[12l]* dr-xr-xr-x 4 4.0K May 24 2012 pictures/1989 dr-xr-xr-x 6 4.0K May 24 2012 pictures/1990 ... dr-xr-xr-x 38 4.0K Dec 15 19:59 pictures/2015 drwxr-xr-x 3 4.0K Jan 10 23:03 pictures/2016 lrwxrwxrwx 1 34 Jan 10 23:03 pictures/latest -> 2016/2016-01-10