![Linux下批次重命名文件](https://rvso.com/image/1311366/Linux%E4%B8%8B%E6%89%B9%E6%AC%A1%E9%87%8D%E5%91%BD%E5%90%8D%E6%96%87%E4%BB%B6.png)
如何使用「重新命名」指令將圖像從「something_full.jpg」遞歸重命名為「something_500.jpg」?
答案1
基本上,您可以使用該rename
工具來實現此目的。它應該有一個基於 Perl 的版本和基於 Debian 的 Linux 發行版,但你可以輕鬆地下載它也從原始程式碼開始(顯然,您需要先使用 使其可執行chmod +x
)。
以下命令將取代目前目錄中所有 JPG 檔案的_full
部分。_500
rename 's/_full/_500/' *.jpg
若要遞歸地執行此操作,請從目前目錄開始,使用rename
with find
。
find . -type f -iname "*.jpg" -exec rename 's/_full/_500/' {} \;
筆記:您可能想在實際執行之前測試該命令。為此,請將選項新增-n
至rename
(例如,在rename
和's//'
字串之間)。
答案2
您可能想了解一下茲馬夫。 zmv 是 zsh 的特定功能,需要autoload -U zmv
位於.zshrc
檔案中的某個位置。
編輯:作為一個例子,OP提出的任務可以透過以下方式解決
noglob zmv '(*)_full.(*)' '$1_500.$2'
手冊頁摘錄zshcontrib
:
zmv [ -finqQsvwW ] [ -C | -L | -M | -p program ] [ -o optstring ] srcpat dest
將與模式srcpat 匹配的文件移動(通常是重命名)到具有dest 給出的名稱形式的相應文件,其中srcpat 包含模式周圍的括號,這些模式將依次替換為dest 中的$1、$2、... 。例如,
zmv '(*).lis' '$1.txt'
重命名
foo.lis
為foo.txt
、my.old.stuff.lis
到my.old.stuff.txt
等。該模式始終被視為 EXTENDED_GLOB 模式。任何名稱未因替換而更改的檔案將被忽略。任何錯誤(一次替換導致空字串,兩次替換給出相同的結果,目標是現有的常規文件並且未給出 -f)都會導致整個函數中止而不執行任何操作。
EXTENDED_GLOB 模式非常強大。這裡是這個概念的一個很好的入門讀物。