[英]Bash script to copy numbered files in reverse order
我有一系列文件:
image001.jpg
image002.jpg
image003.jpg
您能幫我一個bash
腳本,該腳本以相反的順序復制圖像,以便最終結果是:
image001.jpg
image002.jpg
image003.jpg
image004.jpg <-- copy of image003.jpg
image005.jpg <-- copy of image002.jpg
image006.jpg <-- copy of image001.jpg
括號中的文本不是文件名的一部分。
我為什么需要它? 我正在根據一系列圖像創建視頻,並且希望視頻先播放“前進”,然后播放“后退”(循環播放結果視頻)。
您可以使用printf
打印以0開頭的數字。
$ printf '%03d\n' 1
001
$ printf '%03d\n' 2
002
$ printf '%03d\n' 3
003
將其扔進for循環會產生:
MAX=6
for ((i=1; i<=MAX; i++)); do
cp $(printf 'image%03d.jpg' $i) $(printf 'image%03d.jpg' $((MAX-i+1)))
done
我認為我將為此使用數組...這樣,您不必為$ MAX硬編碼一個值。
image=( image*.jpg )
MAX=${#image[*]}
for i in ${image[*]}
do
num=${i:5:3} # grab the digits
compliment=$(printf '%03d' $(echo $MAX-$num | bc))
ln $i copy_of_image$compliment.jpg
done
我使用“ bc”進行算術運算,因為bash將前導0解釋為數字是八進制的指示符,並且bash中的參數擴展功能不足以剝離它們而不用跳過箍。 我本可以在sed中完成此操作,但是只要我在bash之外調用某些東西,直接進行算術就很有意義。
我認為Kuegelman的腳本可以完成以下操作:
MAX=(ls image*.jpg | wc -l)
但是,該腳本有更大的問題,因為它會覆蓋一半的圖像:
cp image001.jpg image006.jpg # wait wait!!! what happened to image006.jpg???
同樣,一旦達到007以上,就會遇到八進制問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.