2016-05-20 156 views
-3

我將在Linux中的文件夾中重命名圖像文件和pdf文件。Linux批量重命名文件

它應該是遞歸的,因爲有些文件位於子子文件夾中。

當前文件名模式是這樣的:

an-yt-h-in-g-123word-123456-anything.jpg (.png .pdf) 

我的目標模式是

123456-anything.jpg (.png .pdf) 

在很短的,我想-NumberString-之前刪除一切,讓一切之後(包括NumberString) 。

任何人都可以幫忙嗎?非常感謝

+1

您是否閱讀過[tag:batch-file]的標籤信息?我假設你不知道它與Windows有關,否則... – aschipfl

+0

感謝您接受它。我輸入「批處理」,它會自動提出批處理文件,這是一個錯誤。 – user1982312

回答

0

該命令將檢查最後一個「數字串」的位置,並從該位置輸出子串到最後。您可以將ls命令更改爲其他內容。

ls | awk -F '-' '{ for(i=NF; i>=0; i--) { if (match($i, /^[0-9]+$/)) { print $i; for (j=i+1; j<=NF; j++){ printf "-%s" ,$j }; print "\n" } } }' $1 ORS=""

1

如果像你說的所有的文件都嚴格命名,你可以使用命令

echo $s | awk -F'-' '{printf "%s-%s", $5, $6}' 

獲得新的名稱,假設原來的文件名由s舉行。

改名可以簡單地mv做像

mv $s $(echo $s | awk -F'-' '{printf "%s-%s", $5, $6}') 

其中s是原來的文件名也。

+0

謝謝PJ。我沒有解釋清楚。當前文件名稱模式可以是任意長度。它就像x-x-x-x-x-x-x-x-x-xxxx-123456-xxxxx.jpg。 – user1982312

+1

無論連字符的數量如何,最後的2個字段都是'awk -F'-''{printf「%s-%s」,$(NF-1),$(NF)}' – indiv

+0

Right,@indiv'我的回答比我的好。 –

0

一個-YT-H-在-G-123word-123456-anything.jpg

對於JPEG文件的平坦目錄:

rename 's/.*-[0-9]+-[A-Za-z]+\./\1-\2/.' *.jpg 

對於遞歸訪問當前目錄:

find . \(-name "*.jpg" -o -name "*.pdf" \) -exec rename 's/.*-[0-9]+-[A-Za-z]+\./\1-\2/.' {} ";"