$ man dos2unix
.
.
.
-i[FLAGS], --info[=FLAGS] FILE ...
Display file information. No conversion is done.
The following information is printed, in this order:
number of DOS line breaks,
number of Unix line breaks,
number of Mac line breaks,
byte order mark,
text or binary, file name.
.
.
.
Optionally extra flags can be set to change the (-i) output.
.
.
.
c Print only the files that would be converted.
"use this script to check which files are in dos format according to vim
"use: in the folder that you want to check
"create a file, say res.txt
"> vim -u NONE --noplugins res.txt
"> in vim: source this_script.vim
python << EOF
import os
import vim
cur_buf = vim.current.buffer
IGNORE_START = ''.split()
IGNORE_END = '.pyc .swp .png ~'.split()
IGNORE_DIRS = '.hg .git dd_ .bzr'.split()
for dirpath, dirnames, fnames in os.walk(os.curdir):
for dirn in dirnames:
for diri in IGNORE_DIRS:
if dirn.endswith(diri):
dirnames.remove(dirn)
break
for fname in fnames:
skip = False
for fstart in IGNORE_START:
if fname.startswith(fstart):
skip = True
for fend in IGNORE_END:
if fname.endswith(fend):
skip = True
if skip is True:
continue
fname = os.path.join(dirpath, fname)
vim.command('view {}'.format(fname))
curr_ff = vim.eval('&ff')
if vim.current.buffer != cur_buf:
vim.command('bw!')
if curr_ff == 'dos':
cur_buf.append('{} {}'.format(curr_ff, fname))
EOF
8条答案
按热度按时间syqv5f0l1#
怎么样:
字符串
我认为尝试使用
^M
来尝试查找文件是不可靠的。2w2cym1i2#
不知道你说的“不可靠”到底是什么意思,但你可能想试试:
字符串
这使用了更友好的 atrocious-filenames-with-spaces-in-them-friendly 选项,并且只在行尾之前找到回车符。
请记住,
^M
是一个CTRLM字符,而不是两个字符。它还将列出即使有 * 一 * 行处于DOS模式的文件,这可能是您想要的,因为这些文件可能是被非UNIX编辑器损坏的UNIX文件。
根据您的更新,Vim将您的文件报告为DOS格式:
如果Vim * 报告为DOS格式,那么 every line以
CRLF
结尾。这就是vim的工作方式。如果甚至 one line没有CR
,那么它被认为是UNIX格式,并且^M
字符在缓冲区中可见。如果它是所有DOS格式,则不显示^M
字符:Vim将同时查找dos和unix行结束符,但Vim内置了对unix的偏好。
如果你真的想知道文件里有什么,不要依赖像Vim这样太聪明的工具:-)
用途:
型
自己检查行尾
zbsbpyhn3#
我很幸运,
字符串
sg24os4d4#
这很像你最初的解决方案;因此,它可能更容易让你记住:
字符串
思考过程:
在Vim中,要删除^M,请键入:
型
其中,^是Ctrl键,M是ENTER键。但我从来不记得要打印该序列所需的键,所以我总是使用以下命令删除它们:
型
所以我的推论是\r和^M是等价的,前者更容易记住。
prdp8dxp5#
如果您的
dos2unix
命令有-i
选项,则可以使用该功能在具有DOS换行符的目录中查找文件。字符串
下面的一行脚本如下:
find
此目录树中的所有文件,dos2unix
以确定要更改的文件,dos2unix
$ find . -type f | xargs -d '\n' dos2unix -ic | xargs -d '\n' dos2unix
个n6lpvg4x6#
我一直在使用
cat -e
来查看文件的行尾。使用
^M
作为一个单一的CTRLM字符并没有真正为我工作(它的工作原理就好像我只是按回车键,没有实际插入不可打印的^M
行结束-用echo '
CTRLM' | cat -e
测试),所以我最终做的可能看起来太多了,但它确实完成了工作:字符串
得双曲余切值.
grep
只是在每个文件的每一行前添加文件名(可以用awk '{print FILENAME, $0}'
替换,但是grep
在我的文件集上工作得更快);cat -e
显式打印不可打印的行结尾;grep
查找以^M$
结尾的行,^M
* 是两个字符 *;sed
部分仅保留文件名(可以替换为cut -d ':' -f 1
);uniq
只保留每个文件名一次。ubof19bj7#
GNU find
字符串
我不知道你找到那些DOS php文件后想做什么,但是如果你想把它们转换成unix,那么
型
就可以了,不需要专门检查是不是DOS文件。
svgewumm8#
如果你希望Vim告诉你哪些文件是这种格式的,你可以使用下面的脚本:
字符串
你的Vim需要用python编译(python是用来循环文件夹中的文件的,可能有一个更简单的方法来做到这一点,但我真的不知道。