2016-11-30 75 views
1

我已經看到接近這個問題,但我還沒有看到我需要的確切答案,似乎無法讓我的頭包裹正則表達式,awk,sed,grep ,重命名我需要做到這一點。批量重命名文件重新排列基於分隔符的文件名

我有一個目錄中的文件,從一個不同目錄的多個子目錄中按順序命名,這個目錄是使用find通過管道傳遞給xargs的。

命令我使用:       

find `<dir1>` -name "*.png" | xargs cp -t `<dir2>` 

這導致包含重複的文件名依次命名爲第二目錄如下:

<name> png格式
<name> .PNG〜1〜
<name> .png。〜2〜
...。 <name>巴紐〜N〜

我想要做的就是採取一切文件結尾的〜*〜和如下其重命名爲:。

<name>#PNG      ,其中「# 「是文件名末尾的」〜「之間的數字

任何幫助,將不勝感激。

回答

0

Perl的rename(獨立命令):

rename -nv 's/^([^.]+)\.(.+)\.~([0-9]+)~/$1.$3.$2/' * 

如果一切正常刪除選項-n

+0

賽勒斯一個小的shell腳本 - 非常感謝你,非常完美。 – hmatthewsims

+0

賽勒斯向前邁進了一步,現在如何處理文件擴展名是什麼,無論是PNG,jpg,jpeg,ico等,它都會使用正確的擴展名。 – hmatthewsims

+0

我已經更新了我的答案。請看看:[我應該怎麼做當有人回答我的問題?](http://stackoverflow.com/help/someone-answers) – Cyrus

0

有可能是這更簡單的方法,但在這裏是用grepawk達到你想要的東西

for i in $(ls|grep ".png."); do 
name=$(echo $i|awk -F'png' '{print $1}'); 
n=$(echo $i|awk -F'~' '{print $2}'); 
mv $i $name$n.png; 
done 
+0

我應該在問題中提到,我正在尋找一個單行的答案 - 賽勒斯上面提供的。 – hmatthewsims