Определите, является ли расположение файла псевдонимом в сценариях bash. - PullRequest
1 голос
/ 09 февраля 2011

Симлинки отличаются от псевдонимов, хотя они, похоже, служат одной и той же цели (более или менее / я думаю). Мне нужно знать, является ли файл псевдонимом, и

if [ -h /path/to/file ]

не работает. Есть ли что-нибудь подобное для псевдонимов? Google был наиболее бесполезен, так как псевдонимы, по-видимому, являются именами чего-то еще в bash.

Спасибо!

Ответы [ 3 ]

4 голосов
/ 09 февраля 2011

Средство поиска хранит информацию о том, что файл является псевдонимом, в ResourceFork файла.Чтобы прочитать эти метаданные, я бы использовал центр внимания, чтобы определить тип файла;следующая команда вернет тип файла, поэтому вы можете сравнить его в операторе if.

 mdls -raw -name kMDItemKind /path/to/test.pdf          returns  PDF (Portable Document Format)
 mdls -raw -name kMDItemKind /path/to/test.pdf\ Alias   returns  Alias

Другим способом будет включение Applescript, который исполняется в командной строке через osascript.Чтобы вернуть тип файла, выполните:

tell application "Finder" to get kind of ((POSIX file "/path/to/test.pdf\ Alias") as alias)
1 голос
/ 09 февраля 2011

Мне не совсем понятно, если вы спрашиваете о:

  • псевдонимах (способ заставить одну команду на самом деле запустить что-то другое)
  • символическая ссылка (способ созданияярлык для файла)
  • жесткая ссылка (два имени файла указывают на одно и то же содержимое файла)

Команда, которую вы пытались:

if [ -h /path/to/file ]

поможет вам определить, является ли файл символической ссылкой или нет, например:

$ touch newfile
$ ln -s newfile newlink
$ for f in newfile newlink; do
    if [ -h "$f" ]; then
        echo "$f is a symlink"
    else
        echo "$f is not a symlink"
    fi
done
newfile is not a symlink
newlink is a symlink

Если вы имеете в виду: «как я могу узнать, будет ли ввод какой-либо команды выполнять псевдоним», тогда вы можете использовать type или alias, например

$ type ls
ls is aliased to `ls --color=auto --format=across'

$ type less
less is /usr/bin/less

Если вы спрашиваете о жестких ссылках, find -inum и ls -i могут помочь, но это более сложная тема.

0 голосов
/ 24 августа 2018

Решение Асмуса не совсем помогло мне, но он заставил меня начать. Вот что сработало для меня (macOS 10.13, High Sierra, при условии, что вы выполняете его в bash):

alias=$( mdls -name kMDItemKind "$file" )
if [[ "$alias" = *Alias* ]]
then
    echo "$file is an Alias"
fi

НТН.

...