我正在尝试编写更改没有 DOS 行结尾的文件的脚本,以将它们更改为具有 DOS 行结尾,但是我对如何定位不包含 DOS 行结尾的文件感到困惑。
我有以下适用于 linux 的命令
$ find -type f -exec file {} \; | grep -v CRLF
Run Code Online (Sandbox Code Playgroud)
它工作并返回
./test/test.bat: ASCII text
Run Code Online (Sandbox Code Playgroud)
但是,在 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]
Run Code Online (Sandbox Code Playgroud)
我也试过
$ 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
Run Code Online (Sandbox Code Playgroud)
是否应该在 OSX 上与 find 一起使用不同的语法来完成此操作?
findMacOS X 上使用的 BSD需要在表达式之前提供路径(您-type f是该表达式的一部分);因此它的使用消息放在path之外[brackets],这表明某些东西是可选的。
使用--以防止文件名被视为选项,并明确通过.为搜索的位置。
find . -type f -exec file -- '{}' + | grep -v CRLF
Run Code Online (Sandbox Code Playgroud)
...已在 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
' _ {} +
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3061 次 |
| 最近记录: |