특정 생성 날짜의 파일에 대해서만 mogrify Convert를 사용하는 방법은 무엇입니까?

특정 생성 날짜의 파일에 대해서만 mogrify Convert를 사용하는 방법은 무엇입니까?

Mogrify를 사용하여 애니메이션 gif를 만들고 있습니다 convert. 그러나 현재 수십 개의 이미지가 있는 폴더에서 실행 중이며 찾은 모든 이미지를 사용하도록 지시합니다. 하지만 특정 날짜에 생성된 파일만 사용하고 싶습니다. 이런 일을 할 수 있나요?

현재 사용되는 명령:

convert -delay 10 -loop 0 images/* animation.gif

내 모든 파일 이름은 타임스탬프이므로 다음과 같이 범위를 지정할 수 있기를 원합니다.

convert -delay 10 -loop 0 --start="images/147615000.jpg" --end="images/1476162527.jpg" animation.gif

나는 convert성공하지 못한 채 매뉴얼 페이지를 시도했습니다. 이것이 가능한가?

답변1

이 작은 쉘 스크립트는 현재 디렉토리의 모든 파일을 반복하고 마지막으로 수정된 타임스탬프를 빌드된 범위 startend타임스탬프(이 경우 10월 10일)와 비교합니다. 일치하는 파일이 배열에 추가되고 files배열에 파일이 있으면 해당 파일을 호출합니다 convert. 최소한 두 개 이상의 파일을 갖고 싶다면 -gt 0.-gt 1

생성 시간은 일반적으로 파일의 (Unix) 속성에 유지되지 않으므로 이 방법은 쉽게 속일 수 있으며 touch 1476158400.jpg이로 인해 이전 파일이 새 파일로 표시될 수 있습니다. 두 번째 옵션은 아래를 참조하세요.

#!/usr/bin/env bash

start=$(date +%s -d 'Oct 10 2016')
end=$(date +%s -d 'Oct 11 2016')

files=()
for f in *
do
  d=$(stat -c%Z "$f")
  [[ $d -ge $start ]] && [[ $d -le $end ]] && files+=("$f")
done

[[ ${#files[*]} -gt 0 ]] && convert -delay 10 -loop 0 "${files[*]}" animation.gif

또는 파일 이름 자체가 생성 타임스탬프를 인코딩하는 경우 무차별 대입 루프를 사용하여 찾을 수 있습니다.

start=$(date +%s -d 'Oct 10 2016')
end=$(date +%s -d 'Oct 11 2016')
files=()
for((i=start;i<=end;i++)); do [[ -f "${i}.jpg" ]] && files+=("${i}.jpg"); done
[[ ${#files[*]} -gt 0 ]] && convert -delay 10 -loop 0 "${files[*]}" animation.gif

답변2

이미지 이름이 다음과 같이 약간 다른 경우:

images/147615000-000.jpg
images/147615000-001.jpg
... more images ...
images/147615000-090.jpg

그러면 다음과 같이 할 수 있습니다:

convert -delay 10 -loop 0 images/147615000-*.jpg animation.gif

하지만 이러한 이미지에는 이유가 있어서 타임스탬프가 찍혀 있는 것 같습니다.

다음과 같은 스크립트를 시도해 볼 수 있습니다.

#!/bin/sh
# 
# Find images from $1 to $2 inclusive

if [ "$2" = "" ]
then
    echo "Pass the first and last file."
    exit
fi
# Basic file check
if [ ! -f "$1" ]
then
    echo "$1 not found."
    exit
fi
if [ ! -f "$2" ]
then
    echo "$2 not found."
    exit
fi

# Get the file list. Note: This will skip the first file.
list=`find "./" -type f -newer "${1}" -and -type f -not -newer "${2}"`

# Include the first image
list="./$1
$list"
# Sort the images as find may have them in any order
list=`echo "$list" | sort`

# create the animation.gif
convert -delay 10 -loop 0 $list animation.gif

# say something
echo "Done"

"animation.gif"를 생성하려는 디렉토리에 이 스크립트를 배치합니다. 이미지가 하위 디렉토리에 있다고 가정합니다. 다음과 같이 호출할 수 있습니다.

sh ./fromToAnimation.sh images/147615000.jpg images/1476162527.jpg

파일 이름이나 경로에 공백이나 기타 특수 문자가 없으면 작동합니다.

관련 정보