我正在尝试执行此命令:
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" {} \;
另外,请注意我在
sed
中添加了一个空参数。在 -i
之后.这是另一个 BSD-vs-GNU 的事情。 sed
的 BSD 版本-i
需要一个参数(用于备份的扩展名)选项,因此为了避免进行备份,您必须明确提供空白。另一方面,GNU 版本会被 sed -i .bak
混淆。因为它需要 -i
的参数直接附加到它(sed -i.bak
)。哇。
关于macos - 执行此命令的 Mac OS X 方式是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48362901/