Estoy llamando a un scriptdesde un scripty pasando un argumento posicional {carpeta} -cuyo valor es una ruta que contiene espacios por lo que necesita ser entrecomillado.
El segundo script es:
#!/bin/bash -xu
find "$1" -type f -iname "*.srt" | grep -v -e "\\.eng" -e "].srt" -e "].[0-9].srt" | while read -r file; do trash -F "$file";done;
No he conseguido añadir las comillas alrededor de la variable path $1
. (Supongo que este es el problema, me gustaría registrar toda la salida para localizarlo pero tampoco estoy seguro de cómo hacerlo)
Intenté escaparlo pero no funcionó \""$1"\"
El primer script:
#!/bin/bash
filebot -exec /Users/john/.filebot/scripts/delete_non-english_subtitles.sh {folder}
El segundo script:
find "$1" -type f -iname "*.srt" | grep -v -e "\\.eng" -e "].srt" -e "].[0-9].srt" | while read -r file; do trash -F "$file";done; \
echo "$1" >> ~/Desktop/SsubDeletetest.txt; \
echo "$1" | awk -F"/" '{ print $NF }' >> ~/Desktop/subtitletest.txt; \
He añadido las líneas de eco para tener una idea de cómo se formatea el valor del argumento. Esas dos líneas de eco están funcionando. Hay salida en esos archivos txt. Pero el comando Find nunca se ejecuta cuando es llamado. Puedo ejecutar los mismos comandos Find en la terminal cuando cito la ruta, pero el argumento aparentemente no se cita porque en el primer espacio en el valor de la ruta la ruta se recorta.
Debo añadir que el primer script está siendo llamado por una aplicación, no en Terminal. Así que la única manera de ver los resultados es la salida a un archivo de texto... creo.
- Su post-proceso script sólo borra los archivos *.srt, por lo que sería un caso de uso -exec bastante sencillo. Usted querrá refactorizar eso en su propio script y luego hacer que filebot lo llame mediante -exec en la carpeta de destino como se ha explicado anteriormente.
Este es el aspecto de la pila de llamadas:
1. qBT calls your qBT_e-program.sh 1.1. qBT_e-program.sh calls filebot 1.1.1. filebot -exec calls your delete-srt-files.sh passing along the destination {folder} as Argument $1 1.1.1.1. delete-srt-files.sh calls find "$1" ...```
Añadiendo más para ayudar a solucionar los problemas. Todavía atascado en esto. He aprendido a obtener algo de salida y tengo algunas pistas pero no puedo resolver el problema.
De nuevo, cuando añado la ruta en el script en cambio de usar la variable citada "$1", el script funciona. Cuando uso la variable falla y resulta en esta salida de error. Esto está siendo llamado desde el script inicial con el argumento citado "{carpeta}". He probado variaciones en el tratamiento de la variable: "{$1}"
\""$1"\"
"$1/"
-$1
. Pensé que tal vez el comando filebot -exec ya estaba citando la variable y mis comillas en realidad la estaban descifrando.
+ read -r file
find: /Volumes/PlexMedia/PlexServer_1/Movies/Paper: No such file or directory
find: Lives: No such file or directory
find: (2021)/Paper: No such file or directory
find: Lives: No such file or directory
find: (2021): No such file or directory
find: {imdb-tt13045890}: No such file or directory
find: [[en]: No such file or directory
find: 2.40:1: No such file or directory
find: WS: No such file or directory
find: 1080p: No such file or directory
find: WEB-DL: No such file or directory
find: x265: No such file or directory
find: 584ECE9D].mp4: No such file or directory
echo result /Volumes/PlexMedia/PlexServer_1/Movies/Paper Lives (2021)/Paper Lives (2021) {imdb-tt13045890} [[en] 2.40:1 WS 1080p WEB-DL x265 584ECE9D].mp4
Veo que la variable se divide en los espacios. Pero está entrecomillada. Este es un archivo diferente pero el mismo script llamándolo desde el Terminal:
Sat Mar 13 12:12:30
iMac191:Klara (2010) john$ /Users/john/.filebot/scripts/delete_non-english_subtitles.sh
+ path='/Volumes/PlexMedia/PlexServer_1/Movies/Test Folder (1968)'
+ find '/Volumes/PlexMedia/PlexServer_1/Movies/Test Folder (1968)' -type f -iname '*.srt'
+ grep -v -e '\.eng' -e '].srt' -e ']\.[0-9].srt'
+ read -r file
+ trash -F '/Volumes/PlexMedia/PlexServer_1/Movies/Test Folder (1968)/moviename.swe.srt'
+ read -r file
0 votos
Por favor, añade detalles sobre cómo lo llamas y sobre el error que obtienes.
0 votos
@nohillside Modificado arriba en el post original.
1 votos
¿Qué es {carpeta}, no es sintaxis bash? También, use comillas simples a menos que quiera que el shell expanda el contenido de una cadena (no tendrá este el parámetro pasado después de -iname por ejemplo)
1 votos
En general aún nos faltan detalles, ¿puedes mostrarnos la salida que obtienes en el intérprete de comandos? No podemos ver su pantalla :-)
0 votos
Me han dicho que {carpeta} es el argumento posicional de la función
filebot
ejecutable que se pasa a la siguiente script.. aunque eso puede ser mi malentendido. He añadido la sugerencia de los desarrolladores sobre cómo escribir la pila script.0 votos
¿Es el
find
con un script/función que no analiza sus argumentos correctamente? Pruebe a añadirtype find
al script y ver si es diferente cuando se ejecuta bajo filebot.0 votos
Además, si ejecutas el segundo script (el del comando find) directamente con
script-name "/path/to/folder“
¿funciona?