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
}

Навіщо ставити ім’я каталогу в буфер обміну? Крім того, що відбувається, якщо ім'я каталогу містить пробіл - цілком поширене явище в наші дні.
roaima

Використання буфера обміну дозволяє полегшити подальші операції, якщо ви хочете.
Jasonleonhard

Якщо ви дійсно хочете, ви можете додати інші поля порівняно легко. замість {print $ 9} ви можете використовувати {print $ 9, $ 10, $ 11} скільки завгодно.
Jasonleonhard

Я переглянув свою відповідь, щоб пояснити пробіл.
jasonleonhard

Ось грубе пояснення: explainshell.com / ...
jasonleonhard

-1

Спробуйте цю команду з короткою версією

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

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