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

时间:2018-01-21 01:43:09

标签: macos ubuntu sed terminal

我正在尝试执行此命令:

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

我收到此错误:

find: -readable: unknown primary or operator

我正在努力寻找和替换任何名称为“A'到' B',这将适用于文件内的文件名和文本。

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

1 个答案:

答案 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。