Я должен конвертировать весь каталог, используя dos2unix
. Я не могу понять, как это сделать.
333
find . -type f -print0 | xargs -0 dos2unix
Рекурсивно найдет все файлы в текущем каталоге и вызовет эти файлы командой dos2unix
find . -type f -print0 | xargs -0 dos2unix
решил бы проблему, я думаю.\;; echo Hello
find
вызов не выполняет эту проверку (хотя это было бы достаточно просто добавить), но современныеdos2unix
правильно пропускают двоичные файлы.Если это большой каталог, вы можете рассмотреть возможность работы с несколькими процессорами:
Это передаст 1 файл за раз, и использовать 4 процессора.
источник
n
увеличил это на порядок или два (в зависимости от того, сколько файлов мы здесь говорим)Так как dos2unix мне не понравился, я развернул свою простую утилиту. Помимо нескольких преимуществ в скорости и предсказуемости, синтаксис также немного проще:
И если вы хотите, чтобы он заходил в подкаталоги (пропуская скрытые каталоги и нетекстовые файлы):
endlines
доступно здесь https://github.com/mdolidon/endlinesисточник
dos2unix
? Искренне любопытноdos2unix
возможностей с различными возможностями (некоторые читают UTF32, например, а некоторые нет; конечные строки - нет). Есть только одинendlines
, возможности которого хорошо известны. 2 / либеральные на входе не всеdos2unix
такие. 3 / эффективное исследование дерева файлов, разработанное для быстрой и практичной работы с десятками тысяч файлов. 4 / выходит из коробки на OSX - что менее важно сейчас, когда существует пакет Brew.Вероятно, лучше пропустить скрытые файлы и папки, например,
.git.
вместо использованияfind
, если вашаbash
версия достаточно свежая или вы используетеzsh
, просто сделайте:Обратите внимание, что для Bash это потребует:
.... но это достаточно полезная функция, которую вы, честно говоря, должны просто вставить в свой
.bashrc
.Если вы не хотите пропускать скрытые файлы и папки, но по-прежнему не хотите связываться
find
(и я бы не стал вас винить), вы можете предоставить второй аргумент recursive-glob, чтобы соответствовать только скрытым записям:Обратите внимание, что в обоих случаях глобус будет расширяться для включения каталогов, поэтому вы увидите следующее предупреждение (возможно, много раз):
Skipping <dir>, not a regular file.
источник
dos2unix
псевдоним, который влияет на расширение аргументов. Что выводится вtype dos2unix
вашей системе?**
вместоfind
«пропустить скрытые файлы и папки, такие как.git
».dos2unix
никогда не видит скрытые файлы, потому**
что не раскрывается, чтобы показать их. Если вы хотите , чтобы автоматически запускатьdos2unix
на скрытых файлов и папок, вы можете использоватьfind
или будет расширяться только скрытые файлы и папки, в том числе (корневой директории), (родительский реж), а также любые другие скрытые записи в текущей папке.dos2unix ** **/.*
**/.*
.
..
dos2unix
просто печатаетсяSkipping <dir>, not a regular file.
при запуске в каталоге, поэтому он работает..
и.
является безопасным.) Кроме того, объединениеls
с глобусом не является хорошим способом проверить, как расширяется глоб; используйтеecho
вместо:echo **
напечатает аргументы, которыеdos2unix
получает отdos2unix **
.**
, что подразумевается, и использованиеecho
проясняет.Обычный вариант использования, как представляется, заключается в стандартизации окончаний строк для всех файлов, переданных в репозиторий Git :
Имейте в виду , что некоторые файлы (например
*.sln
,*.bat
) и т.д., только используются в операционных системах Windows , и должны держатьCRLF
окончание:При необходимости используйте
.gitattributes
источник
Для любых пользователей Solaris (я использую 5.10, может применяться и к более новым версиям, а также к другим системам Unix):
По умолчанию dos2unix не перезаписывает файл, он просто печатает обновленную версию на стандартный вывод, поэтому вам придется указать источник и цель, то есть дважды одно и то же имя:
источник
источник
У меня была такая же проблема, и благодаря сообщениям здесь я решил ее. Я знал, что у меня есть около ста файлов, и мне нужно было запустить его только для файлов * .js.
find . -type f -name '*.js' -print0 | xargs -0 dos2unix
Спасибо за вашу помощь.
источник
Я думаю, что самый простой способ:
источник
Я гуглял это миллион раз, поэтому мое решение - просто включить эту функцию bash в вашу среду.
.bashrc
или.profile
или любой другойиспользование
$ dos2unixd ./somepath
Таким образом, у вас все еще есть оригинальная команда,
dos2unix
и это легко запомнитьdos2unixd
.источник
Если нет подкаталога, вы также можете взять
источник
dos2unix *
это проще и на самом деле будет более надежным, чем это. (Обычно не рекомендуется передавать выходные данныеls
, потому что это инструмент форматирования и*
более надежный для программного использования.)ls
не очень хорошая