비디오의 길이를 알려주는 작은 쉘 스크립트를 만들고 비디오의 파일 이름을 매개변수로 전달하고 싶습니다. 다음과 같이 보일 것입니다:
$ script_name "file name with spaces.webm" # or any other media file extension
스크립트 파일은 다음과 같습니다
#/bin/bash
SECRET_SAUCE_USING_$1 | mediainfo | grep Duration | sort -u
# maybe SECRET_SAUCE_USING_$1 | xargs -0 mediainfo . . .
명령줄에서는 이것이 작동하며 스크립트에서 수행하려는 작업은 다음과 같습니다.
$ mediainfo file\ name\ with\ spaces.webm | grep Duration | sort -u
나는 다음과 같은 것을 사용해 보았습니다.
echo "$1" | sed 's/ /\\ /g' # piped to mediainfo . . .
파일 이름의 공백을 "\" 문자 쌍(따옴표 제외)으로 변경합니다. echo... | sed... 부분적으로 작동하지만 mediainfo barfs
그리고
echo "$1" | tr ' ' '\000' | xargs -0 mediainfo . . .
공백을 null로 변경하고 xargs가 공백 대신 파일 이름에 null을 사용하여 mediainfo를 호출하도록 합니다.
지금까지 나는 해결책을 찾지 못했습니다. (저는 실제로 bash가 아닌 zsh를 사용하고 있습니다.) 어떤 도움이라도 대단히 감사하겠습니다. Tnx.
답변1
스크립트의 매개변수( $1
)가 mediainfo의 매개변수로 끝나도록 하려면 해당 매개변수를 해당 위치에 입력하세요.
# ...
mediainfo "$1" | grep Duration | sort -u
# ...
이는 스크립트의 단일 매개변수에 대해 작동합니다. 유연성을 높이기 위해 스크립트의 모든 매개변수를 반복하여 한 번에 하나씩 mediainfo에 제공할 수 있습니다.
for file in "$@"
do
mediainfo "$file" # ...
done