У меня есть много файлов *.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
окончания строк. p.S: Общее количество файлов в каталоге составляет 249. Количество файлов в каталоге не является фиксированным, поэтому было бы лучше, если бы я мог иметь произвольное количество аргументов вместо 249.
В команде
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 {} +