Как запустить 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 ФАЙЛ
Молодцы