如何查询所有Finder别名的目标?

问题描述 投票:0回答:2

Mac OSX 10.6

我有一些别名指向错误的卷。我想在我的整个层次结构中搜索此类别名。它们是别名,而不是符号链接,所以我不能只做

find / -type l -ls | grep badVolumeName

别名似乎有一个 com.apple.ResourceFork,但是使用

xattr
查询它会给出二进制数据。有没有办法将别名的目标转储为文本,以便我可以 grep 查找错误的卷名称?或者还有什么其他方法可以做到这一点?

macos alias finder xattr
2个回答
3
投票

要查找别名文件,您可以使用StackOverflow 上的这个答案。首先,创建一个脚本

is_alias.sh
:

#! /bin/bash
[ "$(mdls -raw -name kMDItemKind "$1")" = "Alias" ]

然后运行

find . -type f -exec ./is_alias.sh {} \; -print

获取别名的路径似乎相当困难。

有人发布了一个使用MacPerl的解决方案,但由于我没有MacPerl,所以我没有测试过这个,不知道它是否有效。

AskDifferent 上有一个类似的问题,有几个不同的建议,但似乎都没有真正解决问题。 Applescript 的答案是好的,但是获取别名文件的“原始项目”这一关键操作似乎不适用于损坏的别名。

您还可以看看这个问题,其中可能有一些可可解决方案。


0
投票

bash 脚本对我不起作用,因为我在 zsh 中运行它。所以我用 find 运行了下面的 perl 脚本:

find . -type f -print0|xargs -0 isAlias.pl

这是 Perl 脚本:

#!/usr/bin/perl -w

while ( my $name = shift @ARGV ) {
  #print $name;

  open my $fh, "-|", ( 'mdls', '-n', 'kMDItemKind', '--', $name ) or die "Failed spawning mdls on '$name': $!";
  my @output_lines = <$fh>;
  close $fh;
  #print " ", scalar @output_lines, " ";
  #print "'", @output_lines, "'\n";
  #chomp $output_lines[0];
  
  $output_lines[0] =~ m/kMDItemKind = "([^"]+)"/ or die "Failed getting ItemKind: $!";

  my $kind = $1;

  if ($kind =~ m/Alias/) {
    print "'$name' is an alias\n";
  }
  #else {
  #    print "\n";
  #}
}
© www.soinside.com 2019 - 2024. All rights reserved.