![임시 파일을 사용하지 않고 명령 출력을 다른 명령에 인수로 전달합니다.](https://linux55.com/image/192607/%EC%9E%84%EC%8B%9C%20%ED%8C%8C%EC%9D%BC%EC%9D%84%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%A7%80%20%EC%95%8A%EA%B3%A0%20%EB%AA%85%EB%A0%B9%20%EC%B6%9C%EB%A0%A5%EC%9D%84%20%EB%8B%A4%EB%A5%B8%20%EB%AA%85%EB%A0%B9%EC%97%90%20%EC%9D%B8%EC%88%98%EB%A1%9C%20%EC%A0%84%EB%8B%AC%ED%95%A9%EB%8B%88%EB%8B%A4..png)
수천 개의 비디오 파일을 한 형식(vob)에서 다른 형식(mkv)으로 변환하려고 합니다. 각 소스 비디오는 순차적으로 번호가 매겨진 8개 미만의 1GB *.vob 파일로 분할됩니다. 안타깝게도 비디오 변환 프로그램은 연결된 단일 vob 파일만 허용할 수 있으며 다음을 사용하여 쉽게 만들 수 있습니다.
cat *.vob > full_movie.vob
(full_movie.vob의 크기는 일반적으로 6~7GB입니다.)
비디오 형식 변환 프로그램의 형식은 다음과 같습니다.
video_convert -i full_movie.vob many_arguments -o full_movie.mkv
이러한 파일은 네트워크 드라이브에 있으므로 네트워크 트래픽이 가장 큰 병목 현상이 됩니다. 나는 모든 임시 full_movie.vob 파일을 생성하고 이후에 파기하는 중간 단계를 어떻게든 피하고 싶습니다(비록 이 파일이 내 노트북 SSD에 로컬로 저장되어 있더라도 >100TB를 써서 파일이 닳고 싶지는 않습니다).
cat *.vob
명령의 출력을 가져와서 (파일로 저장하는 대신) RAM에 저장하고 어떻게든 video_convert 프로그램 매개변수에 푸시할 수 있는 방법이 있습니까 ? 서버에 임시 파일을 저장해야 한다면 네트워크 트래픽과 시간이 두 배로 늘어납니다.
이것은 둥근 구멍에 있는 사각형 말뚝일 수 있습니다…
답변1
프로그램 video_convert
에 파일 대신 표준 입력을 처리하는 옵션이 있습니까? 그렇다면 출력을 파이프하면 됩니다 cat *.vob
. 그런데 많은 프로그램에서는 -
파일 이름을 사용하여 표준 입력을 나타내거나, 파일 이름을 제공하지 않으면 기본적으로 표준 입력을 사용할 수 있습니다. 또는 /dev/stdin
예를 들어 .for를 사용할 수 있습니다.
cat *.vob | video_convert many_arguments -o full_movie.mkv
cat *.vob | video_convert -i - many_arguments -o full_movie.mkv
cat *.vob | video_convert -i /dev/stdin many_arguments -o full_movie.mkv
video_convert
입력에서 특정 위치를 찾아야 하는 경우 stdin을 사용할 수 없습니다. 연속적인 데이터 스트림을 처리할 수 있는 경우에만 효과적입니다. 사용하는 경우에도 동일하게 적용됩니다.프로세스 교체또는명명된 파이프@muru가 댓글에서 언급했듯이 AKA fifo도 검색할 수 없습니다.