linux - 检查文件是否为 unix 文件,如果为真则设置一点

标签 linux shell unix

我想创建一个 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/

相关文章:

shell - 为什么 fish 不支持POSIX?

bash - Shell 脚本,将命令输出存储在变量中并保留格式

linux - expect script + fit expect 以防不需要密码

linux - 运行平台本地:build in Ubuntu,接收错误

c++ - 想用cmake制作独立程序

shell - 无法使用 oozie 运行 shell 脚本

shell - while 循环的输入来自 `command` 的输出

linux - 本地 IPC 的 POSIX 消息队列或 unix 域套接字

linux - 在 shell 脚本中使用只读变量

c - 错误 "Passing argument N of ' functionName ' from incompatible pointer type"是什么意思?