我想创建一个 shell 文件来查找文件是 Unix 还是 Dos 文件类型。使用 IF 查询,我想在检查文件是否需要使用“dos2unix”进行转换后决定。我知道命令“FILE”,但返回值不是 BOOLEAN 数据类型,而是字符串。
那么如果文件是 unix 文件类型,有什么方法可以将 BOOLEAN 位设置为 true 吗?
提前致谢...!
最佳答案
您可以解析file
命令的输出。对于以\n 行结尾的文本文件,它输出 ASCII 文本 ...
,而对于以\r\n 行结尾的文本文件,它输出 带有 CRLF 行终止符的 ASCII 文本 ...
。请注意,根据实际文件内容,可以有其他信息来代替“...”。因此,你可以做类似的事情
file YOURFILE | grep -q '^ASCII text.*with CRLF'
((is_dos_text_file=1-$?))
如果 YOURFILE 被 file 判断为以 CRLF 结尾的文本文件,则变量 is_dos_text_file
包含值 1。如果 YOURFILE 具有 Unix 行结尾,或者未被判断为文本文件,则为 0。
更新:我刚刚注意到您在帖子中使用了 shell 标签,因此搜索 Posix Shell 解决方案。在这种情况下,无法使用 ((...))
构造,您必须执行类似的操作
if file YOURFILE | grep -q '^ASCII text.*with CRLF'
then
is_dos_text_file=1 # true
else
is_dos_text_file=0 # false
fi
获得相同的效果。
关于linux - 检查文件是否为 unix 文件,如果为真则设置一点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55907439/