我正在尝试脚本更改没有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应该使用不同的语法来完成此任务吗?
答案 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
' _ {} +