Files

重命名文件以更改標點符號和編號

  • April 18, 2019

我需要一個命令來遞歸重命名 Ubuntu 中的大量 jpg 文件。

但是也存在一些問題。一組正常的文件看起來像ani-estate-villas_1431640729_3.jpgani-estate-villa_3627544278_7.jpg並且ani-estate-villa_3143254376_5.jpg

我需要用 替換所有-_刪除所有數字,然後添加在每個目錄中重置的編號。因此,同一組文件應該看起來像ani_estate_villas_1.jpg, ani_estate_villas_2.jpgani_estate_villas_3.jpg並且與其他目錄中的其他文件相同。

遞歸的深度是 1 或 2 個目錄深,因此您可能會發現 adirectory/file.jpgdirectory/directory/file.jpg它幾乎是隨機的。

在每個帶有 jpgs 的目錄中執行命令也是可行的,所以如果有人知道如何重命名具有這些特徵的所有文件就可以了。雖然執行單個命令更酷,但我非常感謝更多重複的解決方案,因為手動更改 400 多個 jpg 文件太多了。

我嘗試使用 krename,但它會刪除我的文件。

您可以使用該prename命令根據用Perl編寫的轉換重命名文件。

讓我們從簡單的開始。要重命名.jpg目錄中的所有文件,將 all 更改-_,我們可以只使用s運算符(我們也可以使用tr)。執行 Perl 程式碼來轉換每個文件名。

prename 's!-!_!g' *.jpg

要將末尾的數字序列更改為簡單的計數器,我們引入了一個計數器變數。我使用全域變數$a作為計數器(引入額外的變數更複雜)。正則表達式(\.[^/.]*)$匹配文件副檔名,並且$1在替換文本中代表括號組匹配的內容。

prename 's!-!_!g; ++$a; s!_[0-9_]+(\.[^/.]*)$!_$a$1!' *.jpg

請注意,文件是按照文件名參數給出的順序重命名的,即擴展的順序*.jpg決定了文件的編號。

BEGIN或者,我們可以使用塊顯式初始化計數器。

prename 'BEGIN {$a = 1;} s!-!_!g; s!_[0-9_]+(\.[^/.]*)$!_$a$1!; ++$a;' *.jpg

要在目前目錄的每個子目錄中執行此操作,請呼叫find.

find -type d -exec sh -c 'cd "$1" && prename "$0" *.jpg' 's!-!_!g; ++$a; s!_[0-9_]+(\.[^/.]*)$!_$a$1!' {} \;

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