符号链接与别名不同,尽管它们似乎有相同的用途(或多或少/我认为)。我需要能够判断文件是否是别名,并且
if [ -h /path/to/file ]
不起作用。别名有什么这样的吗?谷歌是最无益的,因为别名显然是bash中其他东西的名称。
谢谢!
答案 0 :(得分:4)
Finder将文件是别名的信息存储在文件的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 :(得分:1)
我不清楚你是否在询问:
您正在尝试的命令:
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
可以提供帮助,但这是一个更高级的主题。
答案 2 :(得分:0)
Asmus的解决方案对我而言并不奏效,但他让我开始了。 这是对我有用的(macOS 10.13,High Sierra,假设您以bash执行):
alias=$( mdls -name kMDItemKind "$file" )
if [[ "$alias" = *Alias* ]]
then
echo "$file is an Alias"
fi
HTH。
答案 3 :(得分:0)
您可以使用/usr/bin/getfileinfo
实用程序:
if ((`getfileinfo -aa /path/to/file`))
then #
fi