Мне нужно преобразовать весь каталог с помощью dos2unix
. Я не могу понять, как это сделать.
Как запустить dos2unix во всей директории?
Ответ 1
find . -type f -print0 | xargs -0 dos2unix
Будет рекурсивно находить все файлы в текущем каталоге и вызывать эти файлы командой dos2unix
Ответ 2
Если это большой каталог, вы можете рассмотреть возможность запуска с несколькими процессорами:
find . -type f -print0 | xargs -0 -n 1 -P 4 dos2unix
Это будет передавать один файл за раз и использовать 4 процессора.
Ответ 3
Как я оказался плохо удовлетворен dos2unix, я выкатил свою собственную простую утилиту. Помимо нескольких преимуществ в скорости и предсказуемости, синтаксис также немного проще:
endlines unix *
И если вы хотите, чтобы он спустился в подкаталоги (пропуская скрытые файлы и нетекстовые файлы):
endlines unix -r .
endlines
доступен здесь https://github.com/mdolidon/endlines
Ответ 4
Вероятно, лучше всего пропустить скрытые файлы и папки, например .git.
So вместо использования find
, если ваша версия bash
достаточно недавняя или если вы используете zsh
, просто выполните:
dos2unix **
Обратите внимание, что для Bash для этого потребуется:
shopt -s globstar
.... но это достаточно полезная функция, которую вы должны честно просто поместить в свой .bashrc
в любом случае.
Если вы не хотите пропустить скрытые файлы и папки, но вы все равно не хотите возиться с find
(и я бы не стал винить вас), вы можете предоставить второй аргумент рекурсивного глоба для сопоставления только скрытых записей:
dos2unix ** **/.*
Обратите внимание, что в обоих случаях glob будет расширяться, чтобы включать каталоги, поэтому вы увидите следующее предупреждение (потенциально много раз): Skipping <dir>, not a regular file.
Ответ 5
Для любых пользователей Solaris (я использую 5.10, может применяться и к более новым версиям, а также к другим Unix-системам):
dos2unix не по умолчанию перезаписывает файл, он просто печатает обновленную версию в stdout, поэтому вам нужно будет указать источник и цель, то есть одно и то же имя дважды:
find . -type f -exec dos2unix {} {} \;
Ответ 6
Если подкаталога нет, вы также можете взять ls | xargs -I {} dos2unix "{}"
.
Ответ 7
для FILE в /var/www/html/files/ *
сделать
/usr/bin/dos 2unix ФАЙЛ
Молодцы