我目录中有许多*.c
文件。我想将所有这些文件转换为兼容格式。我尝试了以下脚本,它运行了,但没有转换任何内容。*.h
Linux
我还需要检查是否所有内容都转换成功。因此,我过滤并将其输出与目录中的原始文件进行比较。
我该如何修复它?
#!/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 {} +