Определите, является ли расположение файла псевдонимом в сценариях 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