2 votos

Ayuda para reemplazar un espacio en blanco con una barra invertida y un espacio en blanco en una variable en Ejecutar comando de shell con Automator

Im creación de un automator servicio que realiza todos los archivos dentro de una carpeta a un compresor preestablecido por la ejecución de la siguiente secuencia de comandos de shell:

VAR="/Applications/Compressor.app/Contents/MacOS/Compressor -batchname MyFirstBatch"
    for d in "$@"; do
        filename=$(basename "$d")
        fname="$(dirname "$d")"/"${filename%.*}"
        VAR+=" -jobpath "$d" -settingpath /Applications/Compressor.app/Contents/Resources/Settings/ProRes/proResHQName.setting -locationpath "$fname".mov"
    done
eval $VAR

El problema es que los trazados resultantes en la cadena de tener un espacio en blanco en lugar de la barra invertida y blankspace, así que quiero reemplazar todos " " en el d variable con un "\ ".

También, hay alguna forma de omitir carpetas y considerar sólo los archivos?

Gracias.

Aquí está una captura de pantalla de mi flujo de trabajo (Get especificado Buscador de Artículos y Obtener el Contenido de la carpeta son sólo para el propósito de pruebas, puedo deshabilitar ellos cuando se utiliza como un servicio):

Screenshot of Automator Service

3voto

Nate Puntos 220

No tengo Compresor.aplicación de la prueba, pero esto debería funcionar:

fileargs=()
for d in "$@"
do
    [ -f "$d" ] || continue
    filename=$(basename "$d")
    fname="$(dirname "$d")"/"${filename%.*}"
    fileargs+=(-jobpath "$d" -settingpath /Applications/Compressor.app/Contents/Resources/Settings/ProRes/proResHQName.setting -locationpath "$fname".mov)
done

/Applications/Compressor.app/Contents/MacOS/Compressor -batchname MyFirstBatch "${fileargs[@]}"

EDIT: Si desea restringir solo a determinadas extensiones de archivo (.mov, .mp4, y .mxf), usted puede utilizar esto en su lugar:

fileargs=()
for d in "$@"
do
    [[ "$d" =~ [.](mov|mp4|mxf)$ ]] || continue
    [ -f "$d" ] || continue
    fileargs+=(-jobpath "$d" -settingpath /Applications/Compressor.app/Contents/Resources/Settings/ProRes/proResHQName.setting -locationpath "${d%.*}".mov)
done

/Applications/Compressor.app/Contents/MacOS/Compressor -batchname MyFirstBatch "${fileargs[@]}"

Tenga en cuenta que con esta restricción, el nombre del archivo es la garantía de tener una extensión, por lo que el ${d%.*}.mov truco que @user3439894 sugerido es seguro de usar. También, es aceptar el uso de la misma -jobpath y -locationpath nombres? (Esto va a suceder cuando tanto la entrada y salida de archivos .mov.)

0voto

Kerry Puntos 100

sólo tener en cuenta .mov, .mp4 y .archivos mxf

He modificado el script de arriba por Gordon Davisson. https://apple.stackexchange.com/a/363864/44531

Esto puede necesitar modificaciones. Yo no entendía el locationpath opción. No tengo compresor, así que simplemente me echo la última línea. Conjunto de depuración a false cuando te cansas de la salida. Yo ya no w-locationpathrite código sin depurar instrucciones.

#!/bin/bash
# question:
# https://apple.stackexchange.com/questions/363854/help-to-replace-a-blank-space-with-a-backslash-and-blankspace-in-a-variable-in-r
# compressor options:
# https://support.apple.com/kb/PH21248?viewlocale=en_KE&locale=en_KE

debug=true
fileargs=()
for d in "$@"
do
    [ debug ] && echo -e "\nProcessing file ${d}"

    filename=$(basename "$d")
    justname="${filename%.*}" 
    # Works for files with no extension
    fileext=""
    [[ "${filename}" == *"."* ]] &&  fileext="${filename##*.}" 

    #  Process these allowed extensions .mov, .mp4 and .mxf 
    [ "${fileext}" = "mov" -o "${fileext}" = "mp4" -o "${fileext}" = "mxf"  ] || continue

    [ debug ] && echo "filename is ${filename}   fileext is ${fileext}    justname is ${justname}"

    # make sure the file exists.
    [ -f "$d" ] || continue

    dirname=$(dirname "$d")
    [ debug ] && echo "dirname is ${dirname}"
    fname="${dirname}/${justname}"
    [ debug ] && echo "fname is ${fname}"

###
### I do not know what you want for locationpath 
###
 fileargs+=(-jobpath "$d" \
      -settingpath /Applications/Compressor.app/Contents/Resources/Settings/ProRes/proResHQName.setting \
      -locationpath "${fname}.${fileext}.mov")
done

echo /Applications/Compressor.app/Contents/MacOS/Compressor -batchname MyFirstBatch "${fileargs[@]}"

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X