2014-01-30 2 views
1

을 명령 난 ImageMagick이를 사용하여에서 애니메이션 GIF를 만들고 싶어배쉬 - 정렬 글로브 전달 입력

motorist_intensity_2.jpg 
... 
... 
motorist_intensity_256.jpg 

광고 파일 이름 이미지의 시리즈가있다. 이제 명령은

convert -delay 100 -loop 0 motorist_intensity_* motorist.gif 

입니다. 그러나 프레임의 정렬 순서가 잘못되었습니다. 나는

ls motorist_intensity_* | sort -n -t _ -k 3 

를 사용하여 정렬 된 파일 목록을 생성 할 수 있지만 내가 어떻게 origial 글로브 motorist_intensity_* 대신에 covert commad에 그 목록을 전달할 수 있습니다?

답변

3

다음은 작동합니다 :

convert -delay 100 -loop 0 `ls motorist_intensity_* | sort -n -t _ -k 3` motorist.gif 

을 다시 따옴표로 명령 ls ...etc을 둬서, 그것은 실행됩니다 및 출력은

업데이 트를 삽입

을 사용하는 것이 바람직하다 $() 표현식을 평가하는 기술 (아래 주석 참조); 또한 나는 sort의 출력이 당신을 망칠 뉴 라인을 포함하지 않을 것이라고 100 % 확신하지는 않습니다. 두 문제 해결 :

convert -delay 100 -loop 0 $(ls motorist_intensity_* | sort -n -t _ -k 3 | xargs echo) motorist.gif 

xargs echo "를 차례로 입력 출력의 각 줄을 가지고, 그리고 줄 바꿈없이 출력에 에코"에 대한 좋은 속기이다. 여러 줄이 하나의 줄로 변환되는 선호하는 방법입니다 (많은 다른 줄이 있지만).

PS - 파일 이름이 개행 문자 인 경우 얻을 수있는 문제는 해결되지 않습니다. 나는

당신은 순서대로 확장 중괄호 확장을 사용할 수 있습니다
+0

내가'구문 분석 ls' 특별히이라고 생각하지 않는다 [좋은 생각] (http://mywiki.wooledge.org/ParsingLs). 또한'$()'구문을 사용하는 것이 항상 더 좋습니다. – fedorqui

+0

@fedorqui - 왜'$()'가'\'\''보다 나은지 설명 할 수 있습니까? 나는 원래의 게시물에 가깝게하려고 노력했다. 그리고 "어떻게 X의 출력을 Y로 가져 가야 하는가?"라는 질문에 집중했다. 그건 그렇고 - 링크 주셔서 감사합니다. 나는'ls' 결과물을 파싱 할 때의 위험에 대해 몰랐습니다. – Floris

+1

예를 들어, http://stackoverflow.com/a/4708569/1983854에서 읽으십시오. – fedorqui

4

당신이 원하는 ... 그렇지 않은 가정입니다 :

convert -delay 100 -loop 0 motorist_intensity_{2..256}.gif motorist.gif 
+0

미리 숫자를 알고 있고 누락 된 프레임이 없다면 실제로 이것은 아주 좋은 해결책입니다. – Floris

+1

불행히도 시작과 끝 사이의 모든 숫자가 있다고 가정합니다. 그렇지 않으면, Imagemagick 오류 출력의 벽이 생깁니다. – Jason