使用find的符号链接返回符号链接指向的文件,而不是符号链接本身

时间:2018-01-25 03:00:04

标签: bash macos find

我经常使用tmutil来控制Timemachine而不是GUI,它有一些不足之处,可以让它对群众有吸引力。我倾向于在我的iMac上安装了很多驱动器,此时我有11个已安装的分区总数为20个,但驱动器和分区随着我/它们的工作而变化。有时一次很多。

我编写了一个单行程序,目的是报告/ Volumes /目录中所有驱动器的排除状态以及简单重用的别名。 alias tmutilvol="find /Volumes/ -maxdepth 1 -exec tmutil isexcluded {} \;"它很有效。典型的输出看起来是,

[Included]    /Volumes
[Excluded]    /Volumes/Backup-Lion
[Excluded]    /Volumes/Backups
[Excluded]    /Volumes/chris
[Excluded]    /Volumes/El Capitan Temp Holding
[Excluded]    /Volumes/Font
[Excluded]    /Volumes/Hades
[Excluded]    /Volumes/iMac Bad
[Excluded]    /Volumes/iMac Clone
[Excluded]    /Volumes/iMac Clone New
[Excluded]    /Volumes/iMac ElCap
[Excluded]    /Volumes/iMac HD
[Excluded]    /Volumes/iMac HD New
[Excluded]    /Volumes/iMac HS Clone
[Excluded]    /Volumes/Macintosh HD Clone 1
[Excluded]    /Volumes/maclaptop
[Excluded]    /Volumes/Old Laptop
[Excluded]    /Volumes/Old-Timemachine-Garnet
[Excluded]    /Volumes/Old-Timemachine-Lion
[Excluded]    /Volumes/TEMPORARY
[Excluded]    /Volumes/Time Machine Mirror

问题是/Volumes/iMac HD。这不是实际的驱动器,它是一个符号链接。

drwxr-xr-x   33 chris  staff  1190 Jan 17 12:31 Backup-Lion
drwxrwxr-x   20 chris  staff   748 Nov 11 22:03 Backups
drwxrwxr-x  107 chris  staff  3706 Nov 13 16:26 El Capitan Temp Holding
drwxrwxr-x   82 chris  staff  2856 Jan 19 16:07 Font
drwxr-xr-x  260 chris  staff  8908 Jan 22 11:51 Hades
drwxr-xr-x@  41 chris  staff  1462 Nov 11 22:03 Macintosh HD Clone 1
drwxr-xr-x   24 chris  staff   884 Nov 11 22:03 Old Laptop
drwxr-xr-x    6 chris  staff   272 Jan 17 12:31 Old-Timemachine-Garnet
drwxrwxr-x@  20 chris  staff   748 Jan 19 14:49 Old-Timemachine-Lion
drwxr-xr-x   20 chris  staff   748 Jan 22 11:54 TEMPORARY
drwxr-xr-x   12 chris  staff   476 Jan 23 01:30 Time Machine Mirror
drwx------@   6 chris  staff   272 Jan 16 16:18 chris
drwxrwxrwx   36 chris  staff  1292 Jan 19 00:15 iMac Bad
drwxrwxrwx   29 chris  staff  1054 Nov 13 16:26 iMac Clone
drwxr-xr-x    6 chris  staff   272 Jan 17 16:05 iMac Clone New
drwxr-xr-x   30 chris  staff  1088 Jan 16 17:31 iMac ElCap
lrwxr-xr-x    1 root   wheel     1 Jan 16 20:34 iMac HD -> /
drwxr-xr-x    6 chris  staff   272 Jan 17 16:05 iMac HD New
drwxrwxr-x   26 root   wheel   952 Nov 13 16:26 iMac HS Clone
drwxrwxrwx   40 chris  staff  1428 Jan 19 15:40 maclaptop

tmutil isexcluded的结果实际上是符号链接而不是“/”

Kaze:~ chris$ tmutil isexcluded /
[Included]    /

我想知道是否有办法让find跟随并传入符号链接的目的地。我阅读了查找手册页和关于-L选项,并认为可以做到这一点,但事实并非如此。一些挖掘stackexchange https://unix.stackexchange.com/questions/31114/find-usage-with-l解释了为什么它不起作用。我无法找到的任何线索是关于我如何做什么以及保持一个简单的单行或如果我将不得不为此编写一个函数并以某种复杂的方式处理符号链接。

我希望那些对CLI和bash有更多了解的人比我可能知道如何做我想做的事情。

1 个答案:

答案 0 :(得分:0)

你试过吗?

readlink "/Volumes/iMac HD"

mac的一个衬垫:

find /Volumes  -maxdepth 1 -exec bash -c 'N="{}"; L=`readlink "{}"`; tmutil isexcluded "${L:-$N}"' \;

说明:

必须使用两个变量,$L用于读取链接输出,$N用于原始名称 ${L:-$N}基本上只输出$L,如果它不为空,则输出$N

请注意,由于MacOS的readlink不输出绝对路径,因此必须在$ L前加上“/Volumes/”。 Linux“readlink -f”解决了这个问题。