Linux 检查文件是否为unix文件,如果为';这是真的
我想创建一个shell文件,查找文件是Unix还是Dos文件类型。使用IF查询,我想在检查文件是否需要使用“dos2unix”进行转换后确定。我知道命令“FILE”,但返回值不是布尔数据类型,而是字符串 那么,如果文件是unix文件类型,有没有办法将布尔位设置为trueLinux 检查文件是否为unix文件,如果为';这是真的,linux,shell,unix,Linux,Shell,Unix,我想创建一个shell文件,查找文件是Unix还是Dos文件类型。使用IF查询,我想在检查文件是否需要使用“dos2unix”进行转换后确定。我知道命令“FILE”,但返回值不是布尔数据类型,而是字符串 那么,如果文件是unix文件类型,有没有办法将布尔位设置为true 提前谢谢 您可以解析文件命令的输出。对于具有\r\n行结尾的文本文件,它输出ASCII文本…,而对于具有\r\n行结尾的文本文件,它输出ASCII文本。。。使用CRLF线路终端。请注意,根据实际文件内容,可以使用其他信息来代替“
提前谢谢 您可以解析
文件
命令的输出。对于具有\r\n行结尾的文本文件,它输出ASCII文本…
,而对于具有\r\n行结尾的文本文件,它输出ASCII文本。。。使用CRLF线路终端
。请注意,根据实际文件内容,可以使用其他信息来代替“…”。因此,您可以执行以下操作
file YOURFILE | grep -q '^ASCII text.*with CRLF'
((is_dos_text_file=1-$?))
if file YOURFILE | grep -q '^ASCII text.*with CRLF'
then
is_dos_text_file=1 # true
else
is_dos_text_file=0 # false
fi
如果文件判断您的文件为带有CRLF结尾的文本文件,则变量is_dos_text_file
包含值1。如果您的文件有Unix行结尾,或者未判断为textfile,则为0
更新:我刚刚注意到您在发布中使用了shell标记,因此搜索Posix shell解决方案。在这种情况下,不能使用(…)
构造,您必须执行以下操作
file YOURFILE | grep -q '^ASCII text.*with CRLF'
((is_dos_text_file=1-$?))
if file YOURFILE | grep -q '^ASCII text.*with CRLF'
then
is_dos_text_file=1 # true
else
is_dos_text_file=0 # false
fi
要获得相同的效果。您可以将该文件转换为Unix文件,并检查它是否仍然相同。在这种情况下,它是一个Unix文件。否则它是一个DOS文件
echo unix > unix-file
echo dos | unix2dos > dos-file
for file in {dos,unix}-file; do
if cmp -s $file <(dos2unix < $file); then
echo $file is a unix file
else
echo $file is a dos file
fi
done
echo unix>unix文件
echo dos | unix2dos>dos文件
对于{dos,unix}-文件中的文件;做
如果cmp-s$文件,您可以使用if文件${myfile}| grep-q'ASCII text';那么bool=1;else-bool=0;fi
可能可以使用dos2unix
的选项-ic
,请参阅man dos2unx
引文:仅转换具有DOS换行符的文件,并保持其他文件不变:dos2unix-ic*.txt | xargs dos2unix
dos2unix
不应更改已具有UNIX行结尾的文件,因此在所有文件上运行它不会有任何影响。非常感谢您的快速回复。我将尝试使用dos2unix-ic选项,因为在我的情况下,在所有文件上运行它并不重要。Unix可以存储所有文件类型,而不仅仅是没有CR-LF的文件类型,因此实际上没有“Unix文件”类型。也许您应该使用一个名为“DopeyWindowsThing”@PS的变量:这不起作用,因为文件打印的描述包含所有文本文件的字符串ASCII文本,而不考虑行尾。谢谢您的详细回答。我已经根据您的示例实现了它。仅对于ascii文件,不要执行dos2unix/bin/cp
。也不要用望远镜看太阳。