Как пользователю конвертировать файлы в формат Linux в скрипте bash?

У меня есть много файлов *.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.

0
задан 21 May 2019 в 21:58

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 {} +
0
ответ дан 21 May 2019 в 21:58

Другие вопросы по тегам:

Похожие вопросы: