.mkv
현재 폴더의 모든 파일을 검색 한 다음 mediainfo
I want to를 사용하여 height
해당 메타데이터를 변수에 넣으려고 하는데 실패하는 것 같습니다.
이 스니펫:
height=$(mediainfo "input.mkv" | grep -E 'Height'); echo $height; height=${height//[!0-9]/}; echo $height;
훌륭하게 작동합니다. 파일 이름을 수동으로 삽입하면 원하는 결과가 출력됩니다.
# height=$(mediainfo 'input.mkv' | grep -E 'Height'); echo $height; height=${height//[!0-9]/}; echo $height;
Height : 720 pixels
720
for file in
그러나 파일 이름을 수동으로 삽입할 필요가 없도록 이를 내 디렉터리에 넣으려고 하면 계속 실패합니다.
for file in *.{mkv}; do height=$(mediainfo "$file" | grep -E 'Height'); echo $height; height=${height//[!0-9]/}; echo $height; done
변수의 출력은 $height
비어 있습니다.
# for file in *.{mkv}; do height=$(mediainfo "$file" | grep -E 'Height'); echo $height; height=${height//[!0-9]/}; echo $height; done
(null)
(null)
"$file"
으로 '$file'
변경해 보았지만 $file
아무 것도 작동하지 않습니다. 뭔가 빠진 것이 있습니까?
답변1
귀하가 작성한 내용 *.{mkv}
은 가 아닙니다 *.mkv
. 따라서 루프는 *.{mkv}
존재하지 않는 "파일"에 대해서만 반복됩니다. 이 경우 출력은 mediainfo
비어 있습니다.
echo "$file"
확인하려면 루프에 이와 같은 것을 추가하십시오.
답변2
"for file" 섹션에서 "{}"를 제거합니다. 다음과 같아야 합니다.
for file in *.mkv; do height=$(mediainfo "$file" | grep -E 'Height'); echo $height; height=${height//[!0-9]/}; echo $height; done
코드에서 "*.{mkv}"는 ".{mkv}"로 끝나는 모든 파일로 확장됩니다. 파일이 없는 것 같아서 for 문의 목록이 비어 있습니다.