OSX命令find -type f -exec file {} \:无效

时间:2016-09-19 20:20:56

标签: bash macos find

我正在尝试脚本更改没有DOS行结尾的文件来更改它们以获得DOS行结尾,但我很想知道如何找到不包含DOS行结尾的文件。

我有以下命令适用于linux

$ find -type f -exec file {} \; | grep -v CRLF 

它起作用并返回

./test/test.bat: ASCII text

然而,在OSX上我得到了

$ find -type f -exec file {} \; | grep -v CRLF
find: illegal option -- t
usage: find [-H | -L | -P] [-EXdsx] [-f path] path ... [expression]
       find [-H | -L | -P] [-EXdsx] -f path [path ...] [expression]

我也试过

$ find . -type f -exec file {} \; | grep -v CRLF
cannot open `' (No such file or directory)
cannot open `' (No such file or directory)
cannot open `' (No such file or directory)
cannot open `' (No such file or directory)
... etc

OSX上的find应该使用不同的语法来完成此任务吗?

1 个答案:

答案 0 :(得分:3)

MacOS X上使用的BSD find需要在表达式之前提供路径(您的-type f是该表达式的一部分);因此,它的使用消息将path放在[brackets]之外,表明某些内容是可选的。

使用--阻止文件名被视为选项,并明确传递.作为搜索位置。

find . -type f -exec file -- '{}' + | grep -v CRLF

...已经在MacOS 10.11.6上进行了明确测试。

要更好地追踪错误,请考虑以下事项:

find . -type f -exec bash -c '
  for result; do
    file "$result" 2>/dev/null || {
      printf "Unable to run file against %q\n" "$result"
    }
  done
' _ {} +