Я ищу простую команду, которую можно использовать в Bash, чтобы найти абсолютный и канонизированный путь к файлу в OS X (аналогично `` readlink -f'` в Linux).
В следующем примере сеанса bash описывается [вымышленная] утилита с именем `` abspath'`, которая демонстрирует желаемое поведение:
$ pwd
/Users/guyfleegman
$ ls -lR
drwxr-xr-x 4 guyfleegman crew 136 Oct 30 02:09 foo
./foo:
-rw-r--r-- 1 guyfleegman crew 0 Oct 30 02:07 bar.txt
lrwxr-xr-x 1 guyfleegman crew 7 Oct 30 02:09 baz.txt -> bar.txt
$ abspath .
/Users/guyfleegman
$ abspath foo
/Users/guyfleegman/foo
$ abspath ./foo/bar.txt
/Users/guyfleegman/foo/bar.txt
$ abspath foo/baz.txt
/Users/guyfleegman/foo/baz.txt
Как и в случае последнего вызова `` abspath'` в приведенном выше примере, я бы предпочел, чтобы он не разрешал автоматически символические ссылки, но я не собираюсь быть слишком требовательным.
macos
osx-snow-leopard
bash
shell
Майкл Венер
источник
источник
Ответы:
Примеры:
источник
Я не думаю, что есть команда buildin, которая делает это. Джесси Уилсон написал сценарий bash для этого:
Тем не менее, он не работает хорошо для путей непосредственно ниже
/
, таких как/etc
(печать//etc
), а также.
и..
(печать/cwd/.
в обоих случаях). Я попытался изменить это, но мой неэффективный bash-fu подвел меня.Вот мое предложение:
Сохранить как
/usr/bin/abspath
или что-то подобное и сделать его исполняемым. Образец вывода:Если вы делаете хотите символьной ссылки разрешение, изменить
print
строку:чтобы получить это:
источник
file /usr/bin/xattr
Одним из вариантов будет просто установить coreutils и использовать
greadlink -f
. Он разрешает символические ссылки и работает с/Foo/
или,~/foo.txt
если они не существуют, но не с,/Foo/foo.txt
если/Foo/
не существует.Это не разрешает символические ссылки и не работает
/Foo/foo.txt
ни с одним из них.dirs -l
выполняет расширение тильды.dirs +0
печатает только самый верхний каталог, если в стеке есть другие каталоги.источник
Я думаю, вы могли бы сделать это с помощью Python или Ruby.
или сделать команду с
источник
Если у вас установлен модуль File :: Spec для perl, вы можете просто сделать это:
источник
Для скриптов bash / sh вы можете использовать эту рекурсивную функцию:
источник
__filename
. Сценарий в настоящее время ведет себя больше как вdirname
любом случае.Установите следующую библиотеку для OSX:
источник
Если установка coreutils не возможна, следующие комбинации обрабатывают символические ссылки. и .. и работает с файлами и папками, как GNU realpath:
Но он не поддерживает realpath -relative-to. Для этого потребуется /programming//a/12498485/869951 .
источник
Учитывая, что ограничение - MacOS (OS X в то время), PHP доступен по умолчанию. Это вернет корневой каталог файла. Удалить,
dirname
чтобы получить файл тоже.источник