Mac OS X 执行此命令的方式是什么



我正在尝试执行以下命令:

find ./ -type f -readable -writable -exec sed -i "s/A/B/g" {} ;

我收到此错误:

find: -readable: unknown primary or operator

我正在尝试广泛查找和替换名称为"A"到"B"的任何内容,这将适用于文件中的文件名和文本。

我在Mac终端上执行此操作的最佳方法是什么?

find 的 BSD 版本没有 -readable-writable 个主目录,但您可以使用 test 命令伪造它们:

find ./ -type f -exec test -r {} -a -w {} ; -exec sed -i "" "s/A/B/g" {} ;

这里可能存在一个问题,即test的语法可能与三个以上的参数不明确,因此像这样的复合测试表达式可能会被错误解析。我不认为以 ./ 开头的路径会成为问题,但如果您担心它,您可以使用两个单独的测试:

find ./ -type f -exec test -r {} ; -exec -w {} ; -exec sed -i "" "s/A/B/g" {} ;

另外,请注意,我在 -i 之后向 sed 中添加了一个 null 参数。这是BSD与GNU的另一个事情。sed的 BSD 版本需要 -i 选项的参数(用于备份的扩展名(,因此为了避免进行备份,您必须显式提供一个空白。另一方面,GNU版本会被sed -i .bak混淆,因为它要求参数-i直接附加到它(sed -i.bak(。呜呜。

最新更新