Tengo que convertir un directorio completo usando dos2unix. No puedo entender cómo hacer esto.
333
find . -type f -print0 | xargs -0 dos2unix
Buscará recursivamente todos los archivos dentro del directorio actual y solicitará estos archivos comando dos2unix
find . -type f -print0 | xargs -0 dos2unixresolvería el problema, creo.\;; echo Hellofindinvocación no hace esta comprobación (aunque sería lo suficientemente simple como para agregar), pero los modernosdos2unixomiten correctamente los archivos binarios.Si es un directorio grande, puede considerar ejecutarlo con múltiples procesadores:
Esto pasará 1 archivo a la vez y usará 4 procesadores.
fuente
nen un orden de magnitud o dos (dependiendo de cuántos archivos estamos hablando aquí)Como estaba poco satisfecho con dos2unix, implementé mi propia utilidad simple. Además de algunas ventajas en velocidad y previsibilidad, la sintaxis también es un poco más simple:
Y si desea que se convierta en subdirectorios (omitiendo directorios ocultos y archivos que no son de texto):
endlinesestá disponible aquí https://github.com/mdolidon/endlinesfuente
dos2unix? Genuinamente curioso.dos2unix, con diferentes capacidades (algunos leen UTF32 por ejemplo, mientras que otros no; las líneas finales no lo hacen). Solo hay unoendlines, cuyas capacidades son bien conocidas. 2 / liberal en la entrada, no todos lodos2unixson. 3 / exploración eficiente del árbol de archivos, diseñada para ser rápida y práctica en decenas de miles de archivos. 4 / se ejecuta fuera de la caja en OSX, lo que es menos importante ahora que existe el paquete Brew.Probablemente sea mejor omitir archivos y carpetas ocultos, como
.git.So, en lugar de usarfind, si subashversión es lo suficientemente reciente o si está usandozsh, simplemente haga lo siguiente:Tenga en cuenta que para Bash, esto requerirá:
.... pero esta es una característica lo suficientemente útil que honestamente deberías ponerla de
.bashrctodas formas.Si no desea omitir carpetas y archivos ocultos, pero aún así no quiere meterse con
find(y no lo culparía), puede proporcionar un segundo argumento de globo recursivo para que coincida solo con las entradas ocultas:Tenga en cuenta que en ambos casos, el globo se expandirá para incluir directorios, por lo que verá la siguiente advertencia (potencialmente muchas veces):
Skipping <dir>, not a regular file.fuente
dos2unixalias que afecta la forma en que se expanden los argumentos. ¿Cuál es la salida detype dos2unixen su sistema?**lugar defind"omitir archivos y carpetas ocultos, como.git".dos2unixnunca ve los archivos ocultos, porque**no se expande para mostrarlos. Si desea que se ejecute automáticamentedos2unixen los archivos y carpetas ocultos, puede utilizarfindodos2unix ** **/.*la**/.*ampliará sólo los archivos y carpetas ocultos, incluyendo.(el directorio raíz),..(dir la matriz), y cualquier otra entrada ocultos en la carpeta actual.dos2unixsimplemente se imprimeSkipping <dir>, not a regular file.cuando se ejecuta en un directorio, por lo que se ejecuta..y.es seguro). Además, combinarlscon un globo no es una buena manera de verificar cómo se expande el globo; useechoen su lugar:echo **imprimirá los argumentos quedos2unixrecibe dedos2unix **.**implicaba, y el uso loechodeja en claro.Un caso de uso común parece ser estandarizar las terminaciones de línea para todos los archivos comprometidos con un repositorio de Git :
Tenga en cuenta que ciertos archivos (p
*.sln. Ej. ,*.batEtc.) solo se usan en sistemas operativos Windows y deben mantener elCRLFfinal:Si es necesario, use
.gitattributesfuente
Para cualquier usuario de Solaris (estoy usando 5.10, puede aplicarse también a versiones más recientes, así como a otros sistemas unix):
dos2unix no sobrescribe por defecto el archivo, solo imprimirá la versión actualizada en stdout, por lo que tendrá que especificar el origen y el destino, es decir, el mismo nombre dos veces:
fuente
fuente
He tenido el mismo problema y gracias a las publicaciones aquí lo he resuelto. Sabía que tenía alrededor de un centenar de archivos y necesitaba ejecutarlo solo para archivos * .js.
find . -type f -name '*.js' -print0 | xargs -0 dos2unixGracias por toda tu ayuda.
fuente
Creo que la forma más simple es:
fuente
Lo busqué en Google un millón de veces, así que mi solución es simplemente poner esta función bash en su entorno.
.bashrco.profileo lo que seaUso
$ dos2unixd ./somepathDe esta manera, todavía tiene el comando original
dos2unixy es fácil recordar estedos2unixd.fuente
Si no hay un subdirectorio, también puede tomar
fuente
dos2unix *es más simple y en realidad será más robusto que esto. (Que generalmente no es recomendable para canalizar la salida dels, porque es una herramienta de formato y*es más fiable para el uso programático.)lsno es buena