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 dos2unix
resolvería el problema, creo.\;; echo Hello
find
invocación no hace esta comprobación (aunque sería lo suficientemente simple como para agregar), pero los modernosdos2unix
omiten 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
n
en 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):
endlines
está 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 lodos2unix
son. 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 subash
versió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
.bashrc
todas 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
dos2unix
alias que afecta la forma en que se expanden los argumentos. ¿Cuál es la salida detype dos2unix
en su sistema?**
lugar defind
"omitir archivos y carpetas ocultos, como.git
".dos2unix
nunca ve los archivos ocultos, porque**
no se expande para mostrarlos. Si desea que se ejecute automáticamentedos2unix
en los archivos y carpetas ocultos, puede utilizarfind
odos2unix ** **/.*
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.dos2unix
simplemente se imprimeSkipping <dir>, not a regular file.
cuando se ejecuta en un directorio, por lo que se ejecuta..
y.
es seguro). Además, combinarls
con un globo no es una buena manera de verificar cómo se expande el globo; useecho
en su lugar:echo **
imprimirá los argumentos quedos2unix
recibe dedos2unix **
.**
implicaba, y el uso loecho
deja 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. ,*.bat
Etc.) solo se usan en sistemas operativos Windows y deben mantener elCRLF
final:Si es necesario, use
.gitattributes
fuente
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 dos2unix
Gracias 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.
.bashrc
o.profile
o lo que seaUso
$ dos2unixd ./somepath
De esta manera, todavía tiene el comando original
dos2unix
y 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.)ls
no es buena