2017-01-27 2 views
2

Как я могу получить полный путь к символической ссылке, не разрешая ее пути к исходному файлу?Получить полный путь без разрешения символических ссылок?

Например, если у меня есть каталог настроить так:

~$ tree analysis_results/ 
analysis_results/ 
`-- Sample1 
    `-- bar.txt -> /Users/me/foo.txt 

Если я пытаюсь получить полный путь к bar.txt, я в конечном итоге с пути к foo.txt вместо:

~$ readlink -f analysis_results/Sample1/bar.txt 
/Users/me/foo.txt 

Но что я действительно хочу это:

/Users/me/analysis_results/Sample1/bar.txt 

есть простой способ сделать это? Похоже, что у меня нет realpath, не уверен, что эта программа делает это, или если есть какая-то другая команда, которая работает так.

Вещи становятся более сложными, когда мой pwd что-то вроде:

/Users/me/analysis/peaks/workflow/code 

Но я хочу, чтобы прочитать полный путь к линку как:

/Users/me/analysis/alignment/results/Sample1/bar.txt 

ответ

0
echo "$(readlink -f analysis_results/Sample1)/bar.txt" 

Resolve только каталог и затем добавьте имя файла в результат.

3

С GNU realpath:

$ touch foo 
$ ln -s foo bar 
$ realpath --no-symlinks bar 
/path/to/bar 
+0

это звучит отлично, к сожалению, «realpath» недоступен в моей ОС, CentOS 6 (просто обновил OP с помощью этой информации). Мне нужно будет изучить его установку. – user5359531

+0

@ user5359531 Вы также можете [сделать что-то подобное в Perl] (http://stackoverflow.com/a/16372849/2908724), если Centos YUM не работает. – bishop

0

Вы хотите полный путь с любыми промежуточными симлинками решена?

Из категории «еще один способ сделать это»: ваша команда pwd, вероятно, имеет параметр «-P» для печати физического пути к каталогу. Таким образом, вы можете обернуть cd и pwd в (), чтобы получить что-то вроде

[email protected][/tmp] 
$ mkdir test 
[email protected][/tmp] 
$ ln -s test linkdir 
[email protected][/tmp] 
$ (cd /tmp/linkdir; pwd -P) 
/tmp/test 

Таким образом, все, что вы делаете cd $(dirname $yourfile) и затем запустить pwd -P, чтобы получить физический путь к родительскому каталогу. Он завернут в parens в примере, поэтому он создает подоболочку и не влияет на ваш текущий рабочий каталог.

Смежные вопросы