파이프 명령에서 현재 파일 이름을 여러 번 사용하는 방법은 무엇입니까?

파이프 명령에서 현재 파일 이름을 여러 번 사용하는 방법은 무엇입니까?

.mov 파일 배치를 mp4로 변환하려고 합니다. ffmpeg 명령을 생성하기 위해 파이프에서 파일 이름을 어떻게 얻을 수 있습니까? 체인 링크에서 파이프 인수를 여러 번 사용하는 방법은 무엇입니까? 나는 그런 것을 가지려고 노력하고 있습니다 :

 ls *.MOV | ffmpeg -y -i $file  "$file.mp4"

답변1

파이프는 다음을 사용하려는 경우에 유용합니다.표준 출력하나의 명령으로표준 입력다른 명령의. 그러나 ffmpeg표준 입력의 파일 이름이 아닌 파일을 입력으로 전달해야 합니다 . 그리고 ffmpeg출력 파일을 얻으려면 각 입력 파일에 대해 한 번씩 여러 번 실행해야 합니다 .

간단히 말해서 파이프는 이에 유용하지 않습니다. 다른 답변에서 제안한 것처럼 루프가 필요합니다. 하지만 파일 이름 매개변수는 큰따옴표로 묶어야 합니다.

for file in *.MOV; do
    ffmpeg -y -i "$file" "$file.mp4"
done

Perl 스크립트를 작성할 수 있다고 의견에서 언급하셨습니다. 그건 정말 지나친 일이겠죠. Bash는 더 간단하고 완벽하게 적합한 접근 방식입니다. 위 스크립트를 한 줄에 작성하고 명령줄에서 직접 실행할 수 있습니다.

for file in *.MOV; do ffmpeg -y -i "$file" "$file.mp4"; done

답변2

간단한 for루프를 사용하여 이 작업을 수행할 수 있습니다.

#!/bin/bash

for file in /path/to/*.MOV
do

    echo "Converting $file"
done

관련 정보