공백이있는 파일 이름을 인수로 전달하려면 어떻게해야합니까?


11

문자열 인수를 허용하는 Python 스크립트가 있습니다.

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

이것은 예상대로 작동합니다.

파이썬 인수 : ["one image.jpg", "another image.jpg"]


파일 이름을 전달해야하는 경우

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

파이썬 인수 : ["one", "image.jpg", "another", "image.jpg"]

-Qof ls명령을 사용하면 큰 따옴표로 결과를 묶을 수 있습니다. 그러나 따옴표는 Python 스크립트에서 이스케이프 상태로 유지됩니다.

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

파이썬 인수 : ['"one image.jpg"', '"another image.jpg"']


ls인수로 사용할 파일 이름을 적절한 문자열로 어떻게 확장해야 합니까? (첫 번째 예에서와 같이)


쉘 확장을 인용해야합니다 : "$(ls -Q '/some/dir/*.jpg')". 그러나 답변에 명시된대로 더 나은 대안이 있습니다.
Bakuriu

답변:


23

파싱하지 마십시오 ls. 그냥 사용하십시오 :

python script.py /path/to/*.jpg

이것은 /path/to/*.jpg적절한 목록으로 대체 되는 쉘 글 로빙을 수행 합니다.


5

나는 위의 글로브의 대답은 최고라고 생각하지만, xargs그리고 find때로는 사용할 수있는 솔루션도있다.

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

이 때문에 작업 -print0find널 (null)로 출력을 분리한다 오히려 공백 바이트 이하와 -0xargs 커맨드의 입력을 가정한다 라인 널 바이트로 분리되는 명령.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.