Eu tenho que converter um diretório inteiro usando dos2unix
. Eu não sou capaz de descobrir como fazer isso.
333
find . -type f -print0 | xargs -0 dos2unix
Irá encontrar recursivamente todos os arquivos no diretório atual e solicitar o comando dos2unix desses arquivos
find . -type f -print0 | xargs -0 dos2unix
resolveria o problema que eu acho.\;; echo Hello
find
invocação não faz essa verificação (embora isso seja simples o suficiente para adicionar), mas o modernodos2unix
ignora corretamente os arquivos binários.Se for um diretório grande, considere executar com vários processadores:
Isso passará 1 arquivo por vez e usará 4 processadores.
fonte
n
por uma ordem de magnitude ou dois (dependendo de quantos arquivos que estamos falando aqui)Como fiquei satisfeito com o dos2unix, estendi meu próprio utilitário simples. Além de algumas vantagens em velocidade e previsibilidade, a sintaxe também é um pouco mais simples:
E se você quiser que ele desça em subdiretórios (pulando diretórios ocultos e arquivos não textuais):
endlines
está disponível aqui https://github.com/mdolidon/endlinesfonte
dos2unix
? Genuinamente curioso.dos2unix
, com recursos variados (alguns leem UTF32, por exemplo, enquanto outros não; as linhas finais não). Há apenas umendlines
, cujos recursos são bem conhecidos. 2 / liberal na entrada, nem todosdos2unix
são. 3 / exploração eficiente da árvore de arquivos, projetada para ser rápida e prática em dezenas de milhares de arquivos. 4 / sai da caixa no OSX - o que é menos importante agora que o pacote Brew existe.Provavelmente, é melhor pular arquivos e pastas ocultos, como
.git.
Então, em vez de usarfind
, se suabash
versão é recente o suficiente ou se você estiver usandozsh
, basta:Observe que, para o Bash, isso exigirá:
.... mas esse é um recurso útil o suficiente para você honestamente colocá-lo de
.bashrc
qualquer maneira.Se você não quiser pular arquivos e pastas ocultos, mas ainda não quiser mexer
find
(e eu não o culpo), você pode fornecer um segundo argumento de recursive-glob para corresponder apenas às entradas ocultas:Observe que, em ambos os casos, o glob se expandirá para incluir diretórios; portanto, você verá o seguinte aviso (possivelmente várias vezes):
Skipping <dir>, not a regular file.
fonte
dos2unix
alias que afeta a maneira como os argumentos são expandidos. Qual é a saída dotype dos2unix
seu sistema?**
vez de,find
é "pular arquivos e pastas ocultos, como.git
".dos2unix
nunca vê os arquivos ocultos, porque**
não se expande para mostrá-los. Se você deseja executar automaticamentedos2unix
em arquivos e pastas ocultos, pode usarfind
oudos2unix ** **/.*
O**/.*
expandirá apenas os arquivos e pastas ocultos, incluindo.
(o diretório raiz),..
(o diretório pai) e quaisquer outras entradas ocultas na pasta atual.dos2unix
simplesmente é impressoSkipping <dir>, not a regular file.
quando executado em um diretório, portanto, executando..
e.
é seguro.) Além disso, combinarls
com um globo não é uma boa maneira de verificar como o globo é expandido; useecho
vez:echo **
imprime os argumentos quedos2unix
recebe dedos2unix **
.**
implícito, e o usoecho
deixa claro.Um caso de uso comum parece ser padronizar as terminações de linha para todos os arquivos confirmados em um repositório Git :
Tenha em mente que certos arquivos (por exemplo
*.sln
,*.bat
) etc são unicamente utilizado em sistemas operacionais Windows e deve manter aCRLF
terminar:Se necessário, use
.gitattributes
fonte
Para qualquer usuário do Solaris (estou usando a 5.10, também pode se aplicar a versões mais recentes, bem como a outros sistemas unix):
O dos2unix não substitui o arquivo por padrão, ele apenas imprime a versão atualizada no stdout; portanto, você terá que especificar a origem e o destino, ou seja, o mesmo nome duas vezes:
fonte
fonte
Eu tive o mesmo problema e, graças aos posts aqui, eu o resolvi. Eu sabia que tinha cerca de cem arquivos e precisava executá-lo apenas para arquivos * .js.
find . -type f -name '*.js' -print0 | xargs -0 dos2unix
Obrigado a todos por sua ajuda.
fonte
Eu acho que a maneira mais simples é:
fonte
Eu pesquisei isso como um milhão de vezes, então minha solução é apenas colocar essa função bash no seu ambiente.
.bashrc
ou.profile
ou o que querUso
$ dos2unixd ./somepath
Dessa forma, você ainda tem o comando original
dos2unix
e é fácil lembrar destedos2unixd
.fonte
Se não houver subdiretório, você também pode
fonte
dos2unix *
é mais simples e, na verdade, será mais robusto que isso. (Geralmente não é recomendado para canalizar a saída dels
, porque é uma ferramenta de formatação e*
é mais confiável para uso programático.)ls
não é bom