Как передать имена файлов с пробелами в качестве аргументов?

У меня есть скрипт Python, который принимает строковые аргументы.

$ python script.py "one image.jpg" "another image.jpg"

Это работает как ожидалось.

Python argparse: ["one image.jpg", "another image.jpg"]

Если мне нужно передать имена файлов, которые я сделал бы,

$ python script.py $(ls "/some/dir/*.jpg")

Python argparse: ["one", "image.jpg", "another", "image.jpg"]

Если вы используете -Q команды ls Я могу обернуть результаты между двойными кавычками. Тем не менее, цитаты остаются экранированными в скрипте Python, т. Е.

$ python script.py $(ls -Q "/some/dir/*.jpg")

Python argparse: ['"one image.jpg"', '"another image.jpg"']

Как мне расширить ls имена файлов в правильные строки для использования в качестве аргументов? (как в моем первом примере)

1
задан 17 August 2016 в 07:58

1 ответ

Я думаю, что лучший ответ на glob выше, но xargs и find также являются решением, которое может использоваться иногда.

find /some/dir/ -name '*.jpg' -print0 | xargs -0 python script.py

Это работает, потому что -print0 на find будет отделять вывод с нулевыми байтами, а не пробелами, а -0 в командной строке xargs будет считать, что вход разделяется нулевыми байтами.

5
ответ дан 23 May 2018 в 07:04

Другие вопросы по тегам:

Похожие вопросы: