2015-04-01 116 views
0

在Mac(OS X)我有一個名爲很多這樣的圖片目錄:使用正則表達式來獲取文件名的部分

IMG_250x333_1.jpg 
IMG_250x333_2.jpg 
IMG_250x333_3.jpg 
... 

我需要所有的人都重命名爲:

IMG_1.jpg 
IMG_2.jpg 
IMG_3.jpg 
... 

我認爲使用帶有「mv」的UNIX命令行和一種正則表達式可以完成這項工作,但我不知道該怎麼做!有人可以幫忙嗎?

謝謝!

回答

0

這裏有一個方法,我想:

ls | sed 's/\(.*\)250x333_\(.*\)/mv "&" "\1\2"/' | sh 
  • 列表與ls的文件。
  • 然後,使用sed轉換文件名,並生成mv命令。請注意,sed命令中的&會輸出完整的輸入字符串。
  • 最後,評估與sh

mv命令對這種做法的好處是,你可以刪除| sh並測試您正則表達式是正確的。

+0

非常感謝你的回答!我剛剛意識到,我的一個目錄中的文件在下劃線和「250」之間的名稱中有一個空格,如下所示:「IMG_ 250x333_1.jpg」。那麼正則表達式會如何呢?再次感謝!! – user3704589 2015-04-01 16:55:13

+0

再次嗨!正如你所提到的,我執行了沒有「sh」的命令行,只是爲了檢查輸出。但是在輸出中我得到了像「IMG_250x333_1.jpg」這樣的全名。當我使用「sh」時,出現錯誤信息「sh:line 1:IMG_250x333-10.jpg:command not found」。我做錯了什麼? – user3704589 2015-04-01 17:02:11

+0

我已經爲'sed' replace命令添加引號來處理文件/目錄名稱中的空格。如果它仍然無法正常工作,您可以粘貼輸出嗎? – joemfb 2015-04-02 14:00:26

1

如果有IMG_111x333_1.jpg和IMG_444x222_1.jpg會怎麼樣?你的風險壓延/覆蓋的東西...

但如果這是你想要的,你可以做這樣的:

#!/bin/bash 
for f in *.jpg; do 
    new=${f/_*_/_} 
    echo mv "$f" $new 
done 

如果你喜歡它在做什麼,刪除單詞echo

+0

好問題!對於每個圖像大小,我的確有幾個目錄,並且認爲我將採用shell腳本並根據文件名中的像素編號對其進行調整。但如果有從文件名中刪除數字的一般方法,我很高興!感謝您的幫助!! – user3704589 2015-04-01 18:36:12

相關問題