Я хочу получить только имя родительского каталога для файла.
Пример: когда у меня есть path=/a/b/c/d/file
, я хочу только, d
а не /a/b/c/d
(что я получаю dirname $path
) в качестве вывода.
Есть какой-нибудь изощренный способ сделать это?
Это звучит , как вы хотите , чтобы базовое имя из на имени папки:
$ filepath=/a/b/c/d/file
$ parentname="$(basename "$(dirname "$filepath")")"
$ echo "$parentname"
d
dirname
команда будет считать, что оно находится в текущем каталоге (он же ".").parentname="$(basename "$(dirname "$pwd")")"
PWD
должны быть написаны заглавными буквами. Попробуйparentname="$(basename "$(dirname "$PWD")")"
.Вы можете использовать pwd, чтобы получить текущий рабочий каталог, и использовать расширение параметров, чтобы избежать разветвления его в другую (под) оболочку.
Редактировать: проверенный источник
источник
${path##*/}
Я думаю, что это решение с меньшими ресурсами:
edit: Извините, вложенное расширение невозможно в bash, но оно работает в zsh. Bash-версия:
источник
filepath=file
или filepath = / file`.foofile
? Если это не полный путь, не могу знать (возможно, еслиfoofile
существующий файл не только «строка»).В bash, в одну строку:
источник
Мне больше нравится ответ Julian67 выше, но вот немного расширенная версия:
источник