Cambiar:
for f in "$@"
do
iconv -f gb18030 -t utf-8 f > f.new
done
A:
for f in "$@"; do
if [[ ! $(basename "$f") =~ .*\..* ]]; then
iconv -f gb18030 -t utf-8 < "$f" > "${f}-new"
else
iconv -f gb18030 -t utf-8 < "$f" > "${f%.*}-new.${f##*.}"
fi
done
Y establecer Entrada de pase: a como argumentos en la Acción Ejecutar Script de Shell.
Para abordar el comentario realizado por Gordon Davisson para manejar un nombre de archivo sin extensión, he modificado el código en mi respuesta anterior.
El código verifica la parte del nombre de archivo de la ruta de acceso completamente cualificada pasada a la Acción Ejecutar Script de Shell utilizando una expresión regular para ver si tiene una extensión, o más literalmente un .
como parte del nombre de archivo, y si no hay un .
en el nombre de archivo procesa la rama if, de lo contrario procesa la rama else.
También tenga en cuenta que usando un glob en lugar de una expresión regular, por ejemplo:
if [[ ! $(base name "$f") == *.* ]]; then
También funcionaría para probar si hay una extensión. De cualquier manera, la nueva ruta de acceso completamente cualificada seguirá apropiadamente uno de estos dos ejemplos:
/ruta/hacia/nombrearchivo
se convierte en: /ruta/hacia/nombrearchivo-new
/ruta/hacia/nombrearchivo.ext
se convierte en: /ruta/hacia/nombrearchivo-new.ext
Nota: Esta respuesta asume que las rutas de acceso completamente cualificadas no contienen caracteres nulos y/o retornos y/o saltos de línea. En mi opinión, las rutas de acceso adecuadas no contienen tales caracteres y no los comprobaré.
1 votos
Para hacerlo funcionar, el input de Pase: en el procedimiento debe ser como argumentos en lugar de stdin.
0 votos
He modificado mi respuesta para abordar un comentario hecho por Gordon Davisson y sugiero que utilices la respuesta modificada en su lugar.