Estaba tratando de hacer un servicio de Finder para convertir fácilmente la codificación de texto de algunos archivos. Debido a que el conjunto de caracteres predeterminado para chino simplificado en Windows es el estándar nacional chino GB18030 (no el UTF-8 usado en Mac).
Con un poco de ayuda de las respuestas en servicios - Automator Obtener el nombre de archivo del archivo seleccionado - Preguntar diferente , Configuro El servicio recibe seleccionado: Archivos o carpetas en: Descubridor
Entonces, hice este script de Shell en Automator:
for f in "$@"
do
iconv -f gb18030 -t utf-8 f > f.new
done
Sin embargo, cuando ejecuto el servicio al seleccionar f, No veo el recién creado f.new en el buscador. Supongo que he configurado mal la ruta de salida. Pero no sé cuál es la forma correcta de arreglarlo.


Respuestas:
Cambio:
A:
Y establecer Pase de entrada: a como argumentos sobre el Ejecutar shell script acción .
Para abordar el comentario hecho por Gordon Davisson para manejar un nombre del archivo con ningún extensión , He modificado el código en mi respuesta anterior.
los código prueba el nombre del archivo parte de la nombre de ruta completo pasado a la Ejecutar script de venta acción usando un expresiones regulares Para ver si tiene una extensión, o más literalmente una
.como parte de la nombre del archivo , y si no hay.en el nombre del archivo se procesa el si rama de lo contrario, procesa la otra rama .También tenga en cuenta que utilizando un glob en vez de una expresiones regulares , p.ej.:
También trabajaría para probar una extensión. De cualquier manera el nuevo nombre de ruta completo Seguirá apropiadamente uno de estos dos ejemplos:
/path/to/filenamese convierte en:/path/to/filename-new/path/to/filename.extse convierte en:/path/to/filename-new.extNota: Esta respuesta asume nombres de ruta completamente calificados no contienen caracteres nulos y / o retornos de carro y / o saltos de línea. OMI adecuada nombres de ruta No contiene tales caracteres y no los probaré.
fuente
<) comenzó a trabajar bien. Y luego te vi agregar el<marca. ¡Y también funciona!file.txt.newcon codificación de texto convertido cuando se ejecuta, pero idealmentefile-new.txtsería aún mejor ¿Es eso posible también? ¡Gracias!forlazo ."${f%.*}-new.${f#*.}"solo funciona con nombres de archivo con exactamente un carácter de período (en directorios que no hacer tener periodos en el nombre). Hacer esto bien es sorprendentemente difícil, pero"${f%.*}-new.${f##*.}"(note el doble#) maneja varios períodos correctamente (aunque todavía se confunde por los nombres de archivo sin puntos).