我如何运行这个 `find` 命令,但只能在非二进制文件上运行?

Joh*_*lla 8 unix find

我想从递归目录层次结构中的所有文件中删除尾随空格。我用这个:

find * -type f -exec sed 's/[ \t]*$//' -i {} \;
Run Code Online (Sandbox Code Playgroud)

这有效,但也会从找到的二进制文件中删除尾随的“空白”,这是不可取的。

如何find避免在二进制文件上运行此命令?

小智 4

您可以尝试使用 Unixfile命令来帮助识别您不需要的文件,但我认为如果您明确指定您想要命中的文件而不是那些您不想要的文件可能会更好。

find * -type f \( -name \*.java -o -name \*.c -o -name \*.sql \) -exec sed 's/[ \t]*$//' -i {} \;
Run Code Online (Sandbox Code Playgroud)

为了避免遍历源代码控制文件,您可能需要类似的东西

find * \! \( -name .svn -prune \) -type f \( -name \*.java -o -name \*.c -o -name \*.sql \) -exec sed 's/[ \t]*$//' -i {} \;
Run Code Online (Sandbox Code Playgroud)

您可能需要也可能不需要一些反斜杠,具体取决于您的 shell。

  • 我不了解您的情况,但我们所有的 Java 源文件始终采用标准 UTF-8,因此 *sed* 命令并不总是对所有这些文件执行正确的操作。我的系统也没有 *sed* 的“-i”选项。编写可移植的 shell 命令很困难,不是吗? (3认同)