Конвертировать выходные строки dos2unix для всех файлов в каталоге - программирование
Подтвердить что ты не робот

Конвертировать выходные строки dos2unix для всех файлов в каталоге

В настоящее время я использую следующую команду, чтобы изменить окончания строки dos2unix, но это для file-y file...

sed -i 's/\r//' filename

Есть ли способ запустить эту команду для всех файлов в каталоге?

4b9b3361

Ответ 1

for i in `find . -type f \( -name "*.c" -o -name "*.h" \)`; do    sed -i 's/\r//' $i ; done

Ответ 2

Самый простой способ запустить dos2unix для всей директории рекурсивно - просто выполнить команду find для каждого найденного файла на основе ваших критериев.

Например, чтобы найти все файлы (исключая имена каталогов) в вашем текущем каталоге и всех его подкаталогах и dos2unix выполнить преобразование по умолчанию для каждого из этих файлов:

find . -type f -exec dos2unix -k -s -o {} ';'

Это выводит каждое имя файла, но не обязательно меняет каждый из них. Это работает следующим образом:

find .: найти что-нибудь в этом каталоге, включая его подкаталоги, и что-нибудь в этих подкаталогах (рекурсия)
-type f: вернуть только имена "обычного файла". Исключить имена папок из результатов.
-exec: Выполните следующую команду для каждого результата. Все, что находится за пределами этой точки, должно рассматриваться как часть этой команды, пока не будет найден символ ;.
dos2unix: dos2unix будет выполняться со следующими параметрами...
-k: сохранить отметку даты выходного файла так же, как входной файл
-s: пропускать двоичные файлы (изображения, архивы и т.д.). Эта опция включена по умолчанию, но я использую ее в любом случае, если в некоторых системах по умолчанию были разные, например, OS X v. Debian v. CentOS v. Ubuntu v....). -o: записать изменения непосредственно в файл, а не создавать новый файл с данными в новом формате.
{}: Это сообщает find вставить имя файла, которое он нашел, в качестве параметра вызова dos2unix.
';': Сообщите find, что параметры для dos2unix завершены. Все, что находится за пределами этой точки, снова будет рассматриваться как параметр find.

Ответ 3

Другая опция: find your_dir type f -exec sed -i 's/\r//' {} \;

Почему вы не используете команду dos2unix? Если вы делаете только sed выше, могут быть файлы (в зависимости от их источника), которые будут иметь неправильный EOF (вы можете увидеть его, если вы запустите cat, а подсказка впоследствии будет объединена с выходом файла)

Ответ 4

dos2unix *.txt

отлично работает, чтобы преобразовать все *.txt файлы в каталог... нет необходимости в команде "find".

Ответ 5

Простой:

sed -i 's/\r//' filename1 filename2 … filenameN

или, если вы говорите о содержании одного каталога

sed -i 's/\r//' *

Работайте хорошо для меня.

Ответ 6

Просто добавив еще одну ссылку...

В Ubuntu 14.04 страница man dos2unix содержит этот пример, в частности, для отказоустойчивого преобразования:

find . -name *.txt | xargs dos2unix

Цитата из страницы man, это будет

... преобразовать все .txt файлы в дерево каталогов под текущим каталог...

Ответ 7

использовать

for i in `ls directory_path`; do    sed -i 's/\r//' $i ; done

для всего каталога.

Ответ 8

find $(pwd) -type f | xargs -I xxx sed -i 's/\r//g' xxx