重命名文件以更改標點符號和編號
我需要一個命令來遞歸重命名 Ubuntu 中的大量 jpg 文件。
但是也存在一些問題。一組正常的文件看起來像
ani-estate-villas_1431640729_3.jpg
,ani-estate-villa_3627544278_7.jpg
並且ani-estate-villa_3143254376_5.jpg
我需要用 替換所有
-
,_
刪除所有數字,然後添加在每個目錄中重置的編號。因此,同一組文件應該看起來像ani_estate_villas_1.jpg
,ani_estate_villas_2.jpg
,ani_estate_villas_3.jpg
並且與其他目錄中的其他文件相同。遞歸的深度是 1 或 2 個目錄深,因此您可能會發現 a
directory/file.jpg
或directory/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!' {} \;