2010-10-26 38 views
1

我重命名一些文件(1234.xml9876.xml2345.xml等)與.xml擴展用下面的代碼:批量重命名文件在UNIX和回滾

for i in *.xml 
do 
mv $i $i.ab 
done 

變得1234.xml.ab9876.xml.ab2345.xml.ab ...等

現在,我想將其重命名爲1234.xml.SD9876.xml.SD2345.xml.SD ...等。

這些是100個文件。

這是如何在代碼的幫助下實現的?請指教。

+0

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

回答

1

如果你正在使用bash,那麼你可以這樣做:

for f in *.xml.ab; do 
    mv "$f" "${f%.ab}.SD" 
done 

或只使用rename命令:

rename 's/ab$/SD/' *.xml.ab 
+0

謝謝,它適用於我:-) – ErAB 2010-10-26 16:08:01

+0

順便說一下,它在MOVE命令中沒有使用「」。 – ErAB 2010-10-26 16:11:22

+2

但是如果你的文件名有空格,那麼沒有'''就會失敗,所以總是把文件名放在'''中。 – codaddict 2010-10-26 16:13:49

0

你可以那樣做:

for f in *.xml.ab; do 
    mv $f `echo $f | sed 's/\.ab$//g'` 
done 
+0

啊,很酷,很容易:-)謝謝! – ErAB 2010-10-26 16:09:36

+0

您需要在變量和命令替換周圍使用雙引號,如果文件名不以'-'開頭並且不包含反斜槓,'echo'纔是可靠的。 'mv ---「$ f」「$(printf%s」$ f「| sed's/\ .ab $ // g')」'沒問題,但[codaddict的回答](http:// stackoverflow .com/questions/4025438/batch-renaming-files-in-unix-and-rollback/4025499#4025499)在概念上更簡單,更容易正確。 – Gilles 2010-10-26 21:03:10

0

我'如果你想重命名foo.xml.ab - > foo.xml或foo.xml.ab - > foo.xml.SD

foo.xml.ab - > foo.xml

for f in *.xml.ab; do 
    mv "$f" "${f%.ab}" 
done 

foo.xml.ab - > foo.xml.SD

for f in *.xml.ab; do 
    mv "$f" "${f/.ab/.SD}" 
done 
+0

它你寫的第二個代碼[foo.xml.ab - > foo.xml.SD]即時嘗試:-)謝謝 – ErAB 2010-10-26 16:08:59