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

Macos Mac OS X执行此命令的方式是什么,macos,ubuntu,sed,terminal,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终端上执行此命令的最佳方式是什么?BSD版本的find没有可读或可写的原色,但您可以使用test命令伪造它们: 这里可能有一个问题,

我正在尝试执行此命令:

find ./ -type f -readable -writable -exec sed -i "s/A/B/g" {} \;
我得到一个错误:

find: -readable: unknown primary or operator
我试图广泛地查找和替换名为“A”到“B”的任何内容,这将适用于文件名和文件中的文本

对我来说,在Mac终端上执行此命令的最佳方式是什么?

BSD版本的find没有可读或可写的原色,但您可以使用test命令伪造它们:

这里可能有一个问题,测试的语法可能有三个以上的参数不明确,所以像这样的复合测试表达式可能是错误的。我认为以./开头的路径不会出现问题,但如果您担心这个问题,可以使用两个单独的测试:

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

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

当您在终端时,请使用man find阅读该命令的手册页。祝你好运。我试过了,我得到了sed:RE错误:非法字节sequence@GabrielBalza我认为这意味着它试图在一个非文本文件上操作,并且遇到了无效的UTF-8文件内容或您当前的语言环境所说的任何内容。您可以添加-exec echo{}\;在-exec sed部分之前,使其在编辑文件名之前打印文件名,并查看哪个文件名会引起问题。
find ./ -type f -exec test -r {} \; -exec -w {} \; -exec sed -i "" "s/A/B/g" {} \;