sed - recursive - convertir dos2unix finales de línea para todos los archivos en un directorio
install dos2unix (8)
La forma más sencilla de ejecutar dos2unix
contra un directorio completo recursivamente es hacer que el comando de find
ejecute para cada archivo que encuentre en función de sus criterios.
Por ejemplo, para buscar todos los archivos (excluyendo los nombres de directorio) en su directorio actual y todos sus subdirectorios y haga que dos2unix
realice la conversión predeterminada en cada uno de esos archivos:
find . -type f -exec dos2unix -k -s -o {} '';''
Esto generará cada nombre de archivo único, pero no necesariamente cambiará cada uno de ellos. Esto funciona de la siguiente manera:
find .
: Encuentre cualquier cosa en este directorio, incluidos sus subdirectorios, y cualquier cosa en esos subdirectorios también (recursión)
-type f
: Solo devuelve los nombres de ''archivo regular''. Excluir nombres de carpetas de los resultados.
-exec
: -exec
el siguiente comando para cada resultado. Todo más allá de este punto debe tratarse como parte de ese comando hasta que ;
Se encuentra el personaje.
dos2unix
: dos2unix
se ejecutará con las siguientes opciones ...
-k
: Mantener la marca de fecha del archivo de salida igual que el archivo de entrada
-s
: Omitir archivos binarios (imágenes, archivos, etc.). Esta opción está incluida de forma predeterminada, pero la uso de todos modos en caso de que la configuración predeterminada fuera diferente en algunos sistemas (por ejemplo, OS X v. Debian v. CentOS v. Ubuntu v. ...).
-o
: escriba los cambios directamente en el archivo, en lugar de crear un nuevo archivo con los datos en el nuevo formato.
{}
: Esto le indica a Find que inserte el nombre de archivo que ha encontrado como parámetro de la llamada dos2unix
.
'';''
: Dígale a find
que los parámetros para dos2unix
han terminado. Cualquier cosa más allá de este punto será tratada nuevamente como un parámetro de find
.
Curretly Estoy usando el siguiente comando para cambiar los finales de línea de dos2unix, pero esto es para file-y file ... hay una manera de ejecutar este comando para todos los archivos en un directorio
sed -i ''s//r//'' filename to convert dos2unix line endings
Gracias,
Otra opción: find your_dir type f -exec sed -i ''s//r//'' {} /;
¿Por qué no estás usando el comando dos2unix? Si está haciendo solo el sed anterior, puede haber archivos (dependiendo de su origen) que tendrán un EOF incorrecto (puede verlo si ejecuta cat y el indicador se concatena a la salida del archivo).
Sencillo:
sed -i ''s//r//'' filename1 filename2 … filenameN
O, si está hablando de contenido de un directorio
sed -i ''s//r//'' *
Funciona bien para mí.
Simplemente añadiendo otra referencia ...
En Ubuntu 14.04, la página man dos2unix
proporciona este ejemplo, específicamente para la conversión recusiva:
find . -name *.txt | xargs dos2unix
Citando desde la página del manual, esta voluntad
... convertir todos los archivos .txt en el árbol de directorios bajo el directorio actual ...
utilizar
for i in `ls directory_path`; do sed -i ''s//r//'' $i ; done
para todo el directorio.
for i in `find . -type f /( -name "*.c" -o -name "*.h" /)`; do sed -i ''s//r//'' $i ; done
dos2unix *.txt
funciona bien para convertir todos los archivos * .txt en un directorio ... no es necesario el comando ''buscar''.
find $(pwd) -type f | xargs -I xxx sed -i ''s//r//g'' xxx