用户如何在 bash 脚本中将文件转换为 Linux 格式?

用户如何在 bash 脚本中将文件转换为 Linux 格式?

我目录中有许多*.c文件。我想将所有这些文件转换为兼容格式。我尝试了以下脚本,它运行了,但没有转换任何内容。*.hLinux

我还需要检查是否所有内容都转换成功。因此,我过滤并将其输出与目录中的原始文件进行比较。

我该如何修复它?

#!/bin/bash

function  converting_files() {

   cd "/path/to/dir" &&  find . -type f -print0 | xargs -0 | dos2unix

}

function success_of_converting_files() {

 FILES=colsim_xfig/xfig.3.2.5c/*
 #There are 250 files in the dir and not all but most of them are .c and .h
 for i in {000..249} ; do                 
   for f in "$Files" ; do 
   #I think *.txt line ending is fine as we only want to compare
     dos2unix < myfile{i}.txt | cmp -s - myfile{i}.txt
   done 
   done        
}

function main() {

   converting_files
   success_of_converting           
}

我基本上需要将所有文件转换为LF行尾。 pS:目录中的文件总数为 249。目录中的文件数量不固定,因此,如果我可以有任意数量的参数而不仅仅是 249 个,那就更好了。

答案1

在命令中

cd "/path/to/dir" &&  find . -type f -print0 | xargs -0 | dos2unix

您正在将一个以空字符分隔的文件名列表通过管道传输到xargs,但不提供在其上运行的命令。在这种情况下,xargs默认对它们执行/bin/echo:换句话说,它只是在标准输出上输出一个以空格分隔的文件名列表,然后您将其通过管道传输到dos2unix。结果是,而不是将文件转换为 Unix 格式,你只需将列表转换为文件名

你可能想的是

cd "/path/to/dir" &&  find . -type f -print0 | xargs -0 dos2unix

find但是,您可以使用命令-exec-execdir例如更紧凑地实现相同的功能

find "/path/to/dir/" -type f -execdir dos2unix {} +

或(限制为.c.h文件)

find "/path/to/dir/" -type f -name '*.[ch]' -execdir dos2unix {} +

相关内容