Command-Line
如何僅對具有特定創建日期的文件使用 mogrify convert?
我正在使用 mogrify 的
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
手冊頁,但沒有運氣。這有可能嗎?
這個小 shell 腳本將遍歷目前目錄中的每個文件,並將其最後修改的時間戳與由
start
和end
時間戳建構的範圍(此處為 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