Bash

Bash Globbing 變數替換?

  • November 27, 2012

可能重複:

批量重命名文件

我想使用現有名稱重命名文件作為新名稱的基礎。

所以如果我可以ls用這些文件

ls blue*+(.png)

我想將它們重命名為

mv blue$(*)+(.png) $(1).png

除了這顯然不起作用。bash globbing 中是否有此類變數的語法,或者是否有更簡單的方法?

便攜的方法是

for f in blue*.png; do mv -- "$f" "${f#blue}"; done

所有這些都需要mv並且不僅適用於任何支持標準 POSIX 參數擴展bash的POSIX 兼容 shell 。您的系統無需安裝或安裝特定版本。zsh``rename

我看不到在 bash 中執行此操作的任何簡單方法,但當然您可以將問題分解為幾個步驟,例如剪切前綴、記住副檔名,然後用單個實例替換副檔名的多個實例。

for file in blue*+(.png); do tmp="${file#blue}"; extension="${file##*.}"; echo "$file" "${tmp/%+(.$extension)/}.$extension";done

如果您對結果滿意,只需鍵入…

^echo^mv

所有的魔法都會發生。:)

引用自:https://unix.stackexchange.com/questions/56799