2012-09-06 285 views
3

我有一組文件如下:重命名批處理文件在UNIX

  • oldname_1.txt
  • oldname_1.pdf
  • oldname_1.bak

等有不同的擴展名,我需要通過「newname」重命名「oldname」,所以我試過:

rename -v 's/\oldname_*.*$/\newname_*.*/’ oldname_*.* 

但這不起作用..

任何建議?

+0

檢查這裏:HTTP://theunixshell.blogspot。 com/2013/01/bulk-renaming-of-files-in-unix.html – Vijay

回答

4

一種方式重命名文件:

for i in oldname*; do mv "$i" "${i/oldname/newname}"; done 
+0

感謝它工作:) – madkitty

3

首先,你應該明確指出「不起作用」的含義。它什麼都不做?它是否錯誤地重命名它們?它是否將電脈衝發送到解剖部位的某些私處? :-)

在任何情況下,我會先從:

rename -v 's/^oldname/newname/' oldname_*.* 

有沒有必要在實際表達通配符的東西,特別是因爲它意味着不同的東西你的想法( xyz_*意味着後跟零個或多個字符_xyz,它意味着以後內容xyz_,並.*是自找麻煩,因爲這意味着零個或多個任意字符)。

文件名的過濾由final參數完成。既然你知道只有與那個參數匹配的文件纔會被重命名,你可以調整你的正則表達式來改變第一個位。


此外,請確保您擁有正確的rename。有可用的不同rename到Linux具有不同的語法:

rename oldname newname oldname_*.* 

在這些系統中,正則表達式變種通常被稱爲prename


最後,原諒什麼可能是一個愚蠢的問題,你肯定這些文件是你期望他們的名字?一個簡單的ls -al oldname*應該顯示這一點。


順便說一句,這工作正常下我的Debian框:

pax> touch oldname_1.txt oldname_1.pdf oldname_1.bak 

pax> ll *name* 
-rw-r--r-- 1 pax pax 0 Sep 6 10:56 oldname_1.bak 
-rw-r--r-- 1 pax pax 0 Sep 6 10:56 oldname_1.pdf 
-rw-r--r-- 1 pax pax 0 Sep 6 10:56 oldname_1.txt 

pax> rename -v 's/^oldname/newname/' oldname_*.* 
oldname_1.bak renamed as newname_1.bak 
oldname_1.pdf renamed as newname_1.pdf 
oldname_1.txt renamed as newname_1.txt 

pax> ll *name* 
-rw-r--r-- 1 pax pax 0 Sep 6 10:56 newname_1.bak 
-rw-r--r-- 1 pax pax 0 Sep 6 10:56 newname_1.pdf 
-rw-r--r-- 1 pax pax 0 Sep 6 10:56 newname_1.txt 
+0

是的,我的路線什麼都不做。我只是試圖重命名-v's/^ oldname/newname /'oldname *。*不幸的是,它也沒有做任何事情。我已經改變了權限到chmod 777,沒有改變。 – madkitty

+0

@madkitty,有更多的閱讀要做和實驗。你能重新閱讀答案嗎? – paxdiablo

+0

非常感謝您的回答,我將保留此文件以便重命名下一批文件,您的解釋非常有用:) – madkitty