Страницы

Поиск по вопросам

среда, 31 октября 2018 г.

BASH команда для получения имени n-ой директории в пути

Нужно узнать имя каталога находящегося выше текущего, потом еще выше и т.д. в BASH
Например есть директория:
/home/Ochen/Glupiy/Vopros
Мне надо получить имя: Glupiy
Потом получить имя еще более верхней DIR: Ochen
И т.д.
Если для текущей директории (Vopros) моя BASH команда
pwd | grep -o '[^/]*$'
представляла из себя квадратные колеса, то командой для директории, что выше (Glupiy) можно обзываться
pwd | grep -o [^/]* | sed -e '$!{h;d;}' -e x
Для директории, что еще выше я уже ничего не придумал :)
Мне надо как то составить такую BASH команду, которой я бы смог дергать имя текущей, верхней, что еще выше и т.д., директории.
Если нельзя составить более менее универсальную команду, то киньте в меня хотя бы командой для получения имени DIR на 2 уровня выше.
Например для: /home/Ochen/Glupiy/Vopros
получить имя: Ochen


Ответ

Команда для получения имени DIR на N уровней выше, считая рабочую:
pwd|tr / "
"|tail -N|head -1
В Вашем примере /home/Ochen/Glupiy/Vopros :
N=1 => Vopros
N=2 => Glupiy и т. д.
А в варианте
pwd|tr / "
"|sed 's/^$/\//'|tail -N|head -1
не потеряется корневая директория
N=5 => /
Поместите команду
pwd|tr / "
"|sed 's/^$/\//'|tail -"$1"|head -1
в файл, сделайте исполняемым и вызывайте с аргументом N
Чтобы работало с каталогами, внутри имен которых перевод строки,
применяем
pwd|tr "
" "\0"|tr / "
"|sed 's/^$/\//'|tail -N|head -1|tr "\0" "
"

Комментариев нет:

Отправить комментарий