【发布时间】:2015-10-28 01:10:09
【问题描述】:
我正在更新一个使用符号链接后的 find 命令的 shell 脚本:
find -L somedir ...
但是,在某些较旧的平台上,不支持 -L,该命令必须使用较旧的 -follow 语法:
find somedir -follow ...
“-follow”标志在较新的系统上已弃用,因此我的策略是测试该命令是否适用于较新的 -L 标志,如果不能使用 -follow 标志。
该脚本当前在 RedHawk 5.4.11 上运行,但在较旧的 Linux 版本上发现了 find 不兼容问题。我被指示在所有 Unix/Linux 平台上进行这项工作。
因此,在创建一个虚拟的find 命令进行测试时,我在/tmp 中创建了一个空的临时目录,以便find 命令快速返回。然后我发现旧系统不支持mktemp -d,所以我打算用老式的方式创建一个。
然后我恍然大悟,“为什么不尝试将/dev/null 作为临时目录而不是创建一个?”所以我尝试了命令:
TEMPDIR=/dev/null
FIND_L_SUPPORTED=`find -L $TEMPDIR &> /dev/null; echo $?`
它似乎可以工作,但我不知道为什么(因为/dev/null 不是目录),或者它是否在所有平台上都可靠。
两个问题:
- 在所有平台上使用
find和/dev/null是否可靠? - 我原来的
find问题的任何其他解决方案,其中一些平台需要-L,但其他需要-follow?
【问题讨论】:
-
要查找的参数不是目录,而是路径。
-
为什么你认为
-L已被弃用? -
"on some older platforms, the -L isn't supported"和"The "-follow" flag is deprecated on newer systems"对我来说很有意义 ;-) 祝大家好运。 -
致 O.P.:“在所有平台上都可靠”?这是一项艰巨的任务。与其希望您在此处收到的建议适用于您(或您的客户)环境中最古老、最坚固的机器,不如构建一个肯定的断言测试(确认支持
-L或-follow)否则您的脚本会失败(在什么情况下)您希望这是 Unix 也不支持的极为罕见的情况)。如果失败消息清楚地表明了问题以及触发的位置,那么未来的维护者将尊重你的名字!也不是mktemp,为什么不只是mkdir -p path?祝你好运。 -
最后,
find -L /dev/nullX生成错误消息并将$?设置为 1。这有帮助吗?祝你好运!