簡體   English   中英

Bash 腳本將常量添加到文件名

[英]Bash script to add constant to file names

我需要一個 bash 腳本來重命名目錄中的文件。 名稱的格式為<name>_<number> (例如bob_12alice_233 )。 腳本必須將它們更改為<name>_<number+k> (例如,如果 k=20, bob_32alice_253 )。 有人可以幫忙嗎?

$ ls
alice_253  bob_32
$ k=20
$ for old in *; do new=${old%_*}_$((${old#*_}+k)); mv "$old" "$new"; done
$ ls
alice_273  bob_52

這只是一個例子。 如果存在名稱具有以下內容的文件,它將無法正常工作:

  • dash 作為第一個字符,
  • 任何數量的下划線,但一個,
  • 下划線右側的非數字字符,
  • 緊跟下划線的零。

如果我們也想涵蓋這些情況,假設文件名可能不重疊(例如foo_100foo_120k=20 ,在這種情況下我們需要先以相反的順序對它們進行排序),我們會這樣做:

# handle -foo_123
# skip foo, foo_bar, foo_012,
# and foo_bar_123
k=20
for old in ./*_*; do
  case $old in
    (*_*_*) ;&
    (*_*[!0-9]*) ;&
    (*_0*) continue
  esac
  new=${old%_*}_$((${old#*_}+k))
  mv "$old" "$new"
done

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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