我在这个魔方上花了几天时间。我为解决一个问题所做的任何事情都会破坏另一个问题。
我在兼容 POSIX 的 MacOS X 10.5 到 10.14 上。我在 Perl 脚本的上下文中调用它
system ("find blah blah > FILENAME");
我需要 Unix 'find' 同时做所有这些事情。
- 从卷根开始,例如
/Volumes/My HD
- 不要跨文件系统
- 仅打印文件,而不是目录或符号链接
- 甚至不要进入多个目录,例如
net dev system
. (即不探索/Volumes/foo/dev/,但探索/Volumes/foo/Users/Jim/ dev /github/twonky/) - 起点可能包含空格
现在我正在做以下事情:(为了便于阅读,分成几行;实际上是一长行)
Find -x '/Volumes/foo/'
-path '/Volumes/foo//dev/*' -prune
-path '/Volumes/foo//net/*' -prune
-path '/Volumes/foo//system/*' -prune
-o -type f -print
双 / 的原因是find的打印输出包含 // 因为起点以 / 结尾。修剪路径必须一致,否则它们将不匹配。为什么起点以/结尾?因为如果没有,则find在名称中带有空格的任何起点上都会失败,例如“我的高清”。试过了。
现在, find 仅排除列表中的第一个目录。其余的,它只是忽略。我目前正在 OS X 10.5 上进行测试,但我需要在任何地方都可以使用的东西。
多个修剪 + 仅文件 + 文件名中的空格是否太过分了?我只是要求太多find吗?