macos - texto - osx cambiar la codificacion de archivos(iconv) recursiva
convertir subtitulos a unicode (7)
Sé que puedo convertir una sola codificación de archivo bajo OSX usando:
iconv -f ISO-8859-1 -t UTF-8 myfilename.xxx > myfilename-utf8.xxx
Tengo que convertir un montón de archivos con una extensión específica, por lo que quiero convertir la codificación de archivos de ISO-8859-1 a UTF-8 para todos los archivos * .ext en la carpeta / mydisk / myfolder
Quizás alguien sepa la sintaxis de cómo hacer esto.
Gracias
ekke
Aquí está el ejemplo Probado en mac 10.10. Encuentre el archivo por su nombre, convierta la codificación, luego reemplace el archivo original.trabajo perfecto. Gracias por el ejemplo de Roman Truba, COPIE el código completo a continuación a su shell script.
#!/bin/bash
find ./ -name *.java -type f | /
(while read file;
do if [[ "$file" != *.DS_Store* ]]; then
if [[ "$file" != *-utf8* ]]; then
iconv -f ISO-8859-1 -t UTF-8 "$file" > "$file-utf8";
rm $file;
echo mv "$file-utf8" "$file";
mv "$file-utf8" "$file";
fi
fi
done);
El comentario de Adam me mostró la manera de resolverlo, pero esta fue la única sintaxis con la que funcionó:
find /mydisk/myfolder -name /*.xxx -type f | /
(while read file; do
iconv -f ISO-8859-1 -t UTF-8 "$file" > "${file%.xxx}-utf8.xxx";
done);
-i ... -o ... no funciona, pero>
gracias de nuevo
ekke
Extendí el guión de Albert.Qings:
- autodetecta la codificación del archivo actual
- añadido un parámetro de comando para hacer un run / exec-run
Se agregó un parámetro para el directorio y el patrón de nombre de archivo.
#!/bin/bash command=${1-"usage"} searchPattern=${2-"*.java"} searchDirectory=${3-"."} if [[ "$command" == "usage" ]]; then echo "convert-file-to-utf8.sh [usage|dry|exec] [searchPattern=$searchPattern] [searchDirectory=$searchDirectory]" exit fi find $searchDirectory -type f -name "$searchPattern" | / (while read file; do if [[ "$file" != *.DS_Store* ]]; then if [[ "$file" != *-utf8* ]]; then currentEncoding="$(file --brief --mime-encoding $file)" if [[ "$currentEncoding" != "utf-8" ]]; then echo "command:$command / iconv -f $currentEncoding -t UTF-8 $file" if [[ "$command" == "exec" ]]; then iconv -f $currentEncoding -t UTF-8 "$file" > "$file-utf8"; rm $file; echo mv "$file-utf8" "$file"; mv "$file-utf8" "$file"; fi fi fi fi done);
Probado en MacOS X 10.12.6 / Sierra.
Prueba esto ... está probado y funciona:
Primer paso (ICONV): encuentra / var / www / -name * .php -type f | (mientras lee el archivo; haga iconv -f ISO-8859-2 -t UTF-8 "$ file"> "$ {file% .php} .phpnew"; listo)
Segundo paso (REESCRIBIR - MV): encuentra / var / www / -name "* .phpnew" -type f | (mientras lee el archivo; haga mv $ file echo $file | sed ''s//(.*/./)phpnew//1php/''
; done)
Es sólo una conclusión sobre mi investigación :)
Espero que ayude a Jakub Rulec
Puede escribir un script en cualquier lenguaje de scripting para iterar sobre cada archivo en / mydisk / myfolder, verificar la extensión con la expresión regular [. (. *) $], Y si es "ext", ejecute el siguiente (o equivalente) desde una llamada al sistema.
"iconv -f ISO-8859-1 -t UTF-8" + file.getName () + ">" + file.getName () + "-utf8.xxx"
Esto solo sería unas pocas líneas en Python, pero lo dejo como un ejercicio para que el lector revise los aspectos específicos de la búsqueda de iteración de directorios y expresiones regulares.
Si quieres hacerlo recursivamente, puedes usar find(1)
:
find /mydisk/myfolder -name /*.xxx -type f | /
(while read file; do
iconv -f ISO-8859-1 -t UTF-8 -i "$file" -o "${file%.xxx}-utf8.xxx
done)
Tenga en cuenta que he utilizado | while read
| while read
lugar de la opción -exec
de buscar (o canalizar a xargs
) debido a las manipulaciones que necesitamos hacer con el nombre de archivo, es decir, cortar la extensión .xxx
(usando ${file%.xxx}
) y agregar -utf8.xxx
.
Si tu shell es bash, algo como esto
for files in /mydisk/myfolder/*.xxx
do
iconv -f ISO-8859-1 -t UTF-8 "$files" "${files%.xxx}-utf8.xxx"
done