Tengo un script de Python que acepta argumentos de cadena.
$ python script.py "one image.jpg" "another image.jpg"
Esto funciona como se esperaba.
Argumento de Python: ["one image.jpg", "another image.jpg"]
Si necesito pasar nombres de archivo, lo haría,
$ python script.py $(ls "/some/dir/*.jpg")
Argumento de Python: ["one", "image.jpg", "another", "image.jpg"]
Si uso el comando -Qof ls, puedo ajustar los resultados entre comillas dobles. Sin embargo, las citas se escapan en el script de Python, es decir.
$ python script.py $(ls -Q "/some/dir/*.jpg")
Argumento de Python: ['"one image.jpg"', '"another image.jpg"']
¿Cómo debo expandir los lsnombres de archivo en cadenas adecuadas para usar como argumentos? (como en mi primer ejemplo)
command-line
bash
python
ejecución automática
fuente
fuente

"$(ls -Q '/some/dir/*.jpg')". Sin embargo, hay mejores alternativas como se indica en las respuestas.Respuestas:
No analizar
ls. Solo usa:Esto lleva a cabo el bloqueo de shell que reemplaza
/path/to/*.jpgpor la lista adecuada.fuente
Creo que la respuesta pegote anterior es mejor, pero
xargsyfindtambién es una solución que se puede utilizar a veces.Esto funciona porque
-print0onfindseparará la salida con bytes nulos en lugar de espacios, y-0en la línea de comando xargs asumirá que la entrada está separada por bytes nulos.fuente