Как рекурсивно применить dos2unix ко всему содержимому папки?

11

Есть ли способ применить dos2unixкоманду, чтобы она работала со всеми файлами в папке и ее подпапках? man dos2unixне показывает какие-либо -rили похожие варианты, которые сделали бы это прямо вперед?

Алекс Кинман
источник

Ответы:

18

find /path -type f -print0 | xargs -0 dos2unix --

Стефан Палетта
источник
2
Не волнуйтесь, dos2unixпо умолчанию файлы пропускаются.
Уолф
3

Пропуск двоичных файлов и скрытых файлов был важен для меня:

Этот работал хорошо для меня:

find . -type f -not -path '*/\.*' -exec grep -Il '.' {} \; | xargs -d '\n' -L 1 dos2unix -k

Что означает: найти все не скрытые файлы рекурсивно в текущем каталоге, затем с помощью grep перечислить все недвоичные (-I) непустые файлы, а затем передать их в файл xargs (разделенный символом новой строки) по одному файлу за раз dos2unix и сохраните оригинальную временную метку.

Смотрите также:

https://github.com/mdolidon/endlines

phyatt
источник
2

Вы можете использовать find, чтобы найти все файлы в структуре каталогов, которые вы хотите запустить с помощью команды dos2unix.

find /path/to/the/files -type f -exec dos2unix {} \;

Посмотрите справочные страницы для поиска, есть много опций, которые вы можете использовать, чтобы указать, что оценивается

Джей Джей
источник
Это не сработало.
Алекс Кинман
2
Будьте ОЧЕНЬ осторожны при выполнении этого, если в дереве файлов есть каталог .git ... он повредил мой локальный репозиторий git.
Aaron_H
1

Используйте подстановочный знак. Как это: (если вы находитесь в папке)

dos2unix *

или если вы находитесь вне папки, выполните:

dos2unix /path/to/folder/*
Отображаемое имя
источник
1

Использование bash:

shopt -s globstar
dos2unix **

Опция globstarоболочки bashпозволяет использовать **глобус. Это работает точно так же, *но совпадает /в путевых именах (следовательно, совпадающие имена в подкаталогах тоже). Это будет работать в каталоге, содержащем умеренное количество файлов в его подкаталогах (не много тысяч).

В zshи yashоболочки (с set -o extended-globв yash), вы бы сделать

dos2unix **/*
Кусалананда
источник