确定文件位置是否是bash脚本中的别名

时间:2011-02-09 05:57:14

标签: macos bash alias symlink

符号链接与别名不同,尽管它们似乎有相同的用途(或多或少/我认为)。我需要能够判断文件是否是别名,并且

if [ -h /path/to/file ]

不起作用。别名有什么这样的吗?谷歌是最无益的,因为别名显然是bash中其他东西的名称。

谢谢!

4 个答案:

答案 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

如果您的意思是:“我怎样才能知道输入某个命令是否会运行别名”,那么您可以使用typealias,例如

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

$ type less
less is /usr/bin/less

如果您询问的是硬链接,find -inumls -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