URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 10163
[ Назад ]

Исходное сообщение
"Как получить полный путь вышестоящей директории?"

Отправлено universite , 08-Июн-17 19:01 
Сабж

Пока сделано так, ибо tar не понимает путей с /../ внутри...


dir="/tmp/sdaf/dsg/dg/df/gd/hf/d"
cd $dir/.. && dir2="$(pwd)"

Где-то видел вариант с awk, но не могу найти...


Содержание

Сообщения в этом обсуждении
"Как получить полный путь вышестоящей директории?"
Отправлено Аноним , 08-Июн-17 19:57 
> Сабж
> Пока сделано так, ибо tar не понимает путей с /../ внутри...
>
 
> dir="/tmp/sdaf/dsg/dg/df/gd/hf/d"
> cd $dir/.. && dir2="$(pwd)"
>

> Где-то видел вариант с awk, но не могу найти...

man realpath


"Как получить полный путь вышестоящей директории?"
Отправлено universite , 08-Июн-17 20:03 
>> Сабж
>> Пока сделано так, ибо tar не понимает путей с /../ внутри...
>>
 
>> dir="/tmp/sdaf/dsg/dg/df/gd/hf/d"
>> cd $dir/.. && dir2="$(pwd)"
>>

>> Где-то видел вариант с awk, но не могу найти...
> man realpath

1) чем realpath лучше pwd ?
2) мне надо текстовая операция над переменной - полным путем директории.



"Как получить полный путь вышестоящей директории?"
Отправлено Аноним , 09-Июн-17 01:11 
>>> Сабж
>>> Пока сделано так, ибо tar не понимает путей с /../ внутри...
>>>
 
>>> dir="/tmp/sdaf/dsg/dg/df/gd/hf/d"
>>> cd $dir/.. && dir2="$(pwd)"
>>>

>>> Где-то видел вариант с awk, но не могу найти...
>> man realpath

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

всё таки ман почитай, realpath тебе отдаст реальный абсолютный путь без точек

если путь таки существует на тазике так как ты делаешь в него cd - дарю:

 
dir="/tmp/sdaf/dsg/dg/df/gd/hf/d"
echo $(realpath $dir/../)


"Как получить полный путь вышестоящей директории?"
Отправлено universite , 09-Июн-17 03:58 
Как-то так:


dir="/tmp/sdaf/dsg/dg/df/gd/hf/d"
dir2="$(echo $dir | awk -F/ '{ for (i = 1; i < NF; i++) printf  $i"/"; }')"


"Как получить полный путь вышестоящей директории?"
Отправлено Andrey Mitrofanov , 09-Июн-17 09:16 
> Как-то так:
>
 
> dir="/tmp/sdaf/dsg/dg/df/gd/hf/d"
> dir2="$(echo $dir | awk -F/ '{ for (i = 1; i <
> NF; i++) printf  $i"/"; }')"
>

+

${dir%/*}   # косячит с / в конце

dir2="$(dirname "${dir}")"

dirn() { echo "${1%/?*}"; }
dir2="$(dirn "${dir}")"

dir2="${dir%/?*}"


"Как получить полный путь вышестоящей директории?"
Отправлено михалыч , 09-Июн-17 10:03 
> ${dir%/*}   # косячит с / в конце

да-да, хардкор никто не отменял ))

dir="/tmp/sdaf/dsg/dg/df/gd/hf/d"
dir2="${dir%/*}/"

чуть про sed не забыл!
sed 's|\(.*/\).*$|\1|'
но в "попугаях" длиннее ))


"Как получить полный путь вышестоящей директории?"
Отправлено Led , 08-Июн-17 20:39 
man 1 dirname


"Как получить полный путь вышестоящей директории?"
Отправлено universite , 09-Июн-17 04:03 
> man 1 dirname

да, подходит, при существовании реальных директорий.



"Как получить полный путь вышестоящей директории?"
Отправлено Аноним , 09-Июн-17 07:14 
> да, подходит, при существовании реальных директорий.

При не существовании тоже:

$ dirname /tmp/sdaf/dsg/dg/df/gd/hf/d
/tmp/sdaf/dsg/dg/df/gd/hf
$
$ ls /tmp/sdaf/dsg/dg/df/gd/hf
ls: невозможно получить доступ к /tmp/sdaf/dsg/dg/df/gd/hf: Нет такого файла или каталога