簡體   English   中英

Bash腳本以相反的順序復制編號的文件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM