Определите, является ли расположение файла псевдонимом в сценариях bash.

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

if [ -h /path/to/file ]

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

Спасибо!

3 ответа

Решение

Средство поиска хранит информацию о том, что файл является псевдонимом в 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)

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

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

НТН.

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

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

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

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 может помочь, но это более сложная тема.

Вы можете использовать /usr/bin/getfileinfo полезность:

if ((`getfileinfo -aa /path/to/file`))
then #
fi
Другие вопросы по тегам