我正在尝试执行此命令:
find ./ -type f -readable -writable -exec sed -i "s/A/B/g" {} \;
我收到此错误:
find: -readable: unknown primary or operator
我正在努力寻找和替换任何名称为“A'到' B',这将适用于文件内的文件名和文本。
在Mac终端上执行此操作的最佳方法是什么?
答案 0 :(得分:1)
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
)。 Wheee。