我正在尝试执行以下命令:
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
(。呜呜。