
Esperando una sugerencia. Usando un script de shell en Mac OS X Catalina que rompió el script. Sé que hubo muchos cambios de seguridad, pero hasta ahora no he descubierto modificaciones para acceder a la carpeta de descargas. Errores de script porque no puede acceder al archivo para imprimir. El guión es:
do shell script "cat `ls -t /UserName/Downloads/Barcodes*.zpl | head -1` | lpr -P BarcodePrinter -o raw " with administrator privileges
Probé varias modificaciones para la ubicación del archivo. La carpeta de descargas todavía recibe un archivo con un nombre largo que *
sería variable para más de 20 caracteres generados a partir del archivo de código de barras. El nombre de la impresora aún coincide pero el error es:
No such file or directory
lpr: No file in print request
Se agradece CUALQUIER sugerencia. He estado buscando en foros pero soy un novato y parece que no puedo encontrar la solución correcta.
Respuesta1
Usando el zsh
shell en macOS, suponiendo que el lpr
comando en sí sea correcto:
lpr -P BarcodePrinter -o raw < ~/Downloads/Barcodes*.zpl(.Nom[1])
El (.Nom[1])
calificador global cambia el comportamiento del patrón global anterior para que solo coincida con archivos normales (eso es lo que .
hace) y para que se expanda a nada si no hay ninguna coincidencia (el N
, corresponde nullglob
en el bash
shell).
Ordena om[1]
los resultados de la coincidencia en orden de marca de tiempo de modificación y selecciona sólo la primera entrada de la lista, es decir, el archivo coincidente modificado más recientemente.
Si el patrón no coincide con nada, lo cual no sucedería si especifica el directorio incorrecto o ha escrito mal un nombre de archivo, el shell se quejará con
zsh: no such file or directory: ~/Downloads/Barcodes*.zpl(.Nom[1])
El shell siempre escribirá la ruta del archivo que no se puede encontrar cuando informa este tipo de error (esto falta en el error de su pregunta y habría facilitado el diagnóstico del problema).
Con la información adicional publicada en los comentarios a continuación, está claro que el nombre real de los archivos coincide con ~/Downloads/zebraBarcodes*.zpl
o ~/Downloads/*Barcodes*.zpl
en lugar de ~/Downloads/Barcodes*.zpl
. Funcionaría el mismo enfoque que el anterior con un patrón actualizado.
Respuesta2
Lo que podría estar sucediendo aquí es que el comportamiento predeterminado ls
es imprimir archivos en la salida estándar por columna, lo que puede causar que varios nombres de archivos estén en una línea. ls
tampoco imprime nombres de archivos completos (es decir, incluido el prefijo del directorio), así que use cd
primero para ingresar al directorio para que los comandos siguientes se dirijan correctamente a los archivos seleccionados. Tampoco usaría un globo ls
para filtrar archivos como ese. Use grep
, que usa expresiones regulares.
Intentar:
cd /Username/Downloads | dir -w 1 -t /UserName/Downloads/ | grep "^Barcodes.*\.zpl$" | head -1 | lpr -P BarecodePrinter -o raw
Además, verifique si su impresora "BarecodePrinter" está escrita correctamente.
sínoSería mejor usar ls
o dir
enumerar sus archivos para analizarlos find
, pero no sé cómo configurarlo correctamente para ordenar por tiempo como ls
sin awk
magia.
Con find
y :sort
awk
find /UserName/Downloads -maxdepth 1 -printf "\n%AD %AT %p\n" | grep ".*Barcodes.*\.zpl$" | sort -r | awk '{ print $3 }' | head -1 | lpr -P BarecodePrinter -o raw
Incluso esto puede fallar debido a nombres de archivos escapados incorrectamente, lo cual find
aparentemente es notorio. Definitivamente es posible hacer esto aún más seguro, pero está fuera de mi alcance. Eso se lo dejo a otros usuarios.