2012-04-13 4 views
0

改擴建我有幾個文件以a.data.txta.mp3b.datb.txtb.mp3b.zipb.rarc.mp3等。我想所有的文件重命名基本名稱「A」到BASENAME「×」。腳本與改變基本名沒有在linux

,使得文件變得x.datx.txtx.mp3b.dat, b.txt , b.mp3 , b.zip , b.rar , c.mp3`等。

在Linux中,這可以通過終端來實現,但需要很多的輸入工作。我想要一個腳本來完成我的任務。

回答

0

我會提出一個方法,我覺得這可能是工作。我覺得這有點奇怪,不要笑。第10次數學。

首先你使用LS的組合和grep命令

  • LS grep的所有名稱的文件夾中| grep的^一,這將列出你所有與作爲第一個字母的文件。您可以使用正則表達式與此,如果你需要使用的名稱唯一文件。

  • 閱讀的文件名逐一while循環

  • 存儲的文件名到一個變量(比如$名稱1)。而使用sed和awk,提取文件名(即第二部分。刪除點到空格並打印第二個顏色)將其存儲在另一個變量(例如$ extn)中。

  • 您可以使用存儲在變量(名稱1 $),指定哪些文件,並使用第二個變量來指定新的名字擴展($分機)的名字命名的文件...

這是一條懶散的路線:)我相信這會奏效。嘗試一下。考慮這個算法和腳本。很抱歉,我提供了一個腳本。稍微懶惰。

4

,當你(在某些系統上或prename)有rename你並不需要一個腳本命令。

它允許一組文件使用任意複雜的Perl的正則表達式進行重命名:

pax> ll qq* 
-rwxr-xr-x 1 pax pax 4574 Apr 13 17:03 qq 
-rw-r--r-- 1 pax pax 213 Apr 13 17:03 qq.c 
-rw-r--r-- 1 pax pax 804 Apr 6 12:23 qq.cpp 
-rw-r--r-- 1 pax pax 258 Apr 5 21:33 qq.m 
-rw-r--r-- 1 pax pax 904 Apr 6 10:35 qq.o 
-rw-r--r-- 1 pax pax 241 Apr 6 10:50 qq.py 
-rw-r--r-- 1 pax pax 769 Apr 7 09:47 qq.txt 

pax> rename 's/qq/xyzzy/' qq* 

pax> ll qq* 
ls: cannot access qq*: No such file or directory 

pax> ll xyzzy* 
-rwxr-xr-x 1 pax pax 4574 Apr 13 17:03 xyzzy 
-rw-r--r-- 1 pax pax 213 Apr 13 17:03 xyzzy.c 
-rw-r--r-- 1 pax pax 804 Apr 6 12:23 xyzzy.cpp 
-rw-r--r-- 1 pax pax 258 Apr 5 21:33 xyzzy.m 
-rw-r--r-- 1 pax pax 904 Apr 6 10:35 xyzzy.o 
-rw-r--r-- 1 pax pax 241 Apr 6 10:50 xyzzy.py 
-rw-r--r-- 1 pax pax 769 Apr 7 09:47 xyzzy.txt 
+0

這應該是被接受的答案。 – user167019 2015-05-02 19:21:47

1

有一個叫mmv該做這項工作的小程序:

$ touch a.dat a.txt a.mp3 b.dat b.txt b.mp3 b.zip b.rar c.mp3 
$ mmv "a.*" "x.#1" 
$ ls 
b.dat b.mp3 b.rar b.txt b.zip c.mp3 x.dat x.mp3 x.txt 

mmv帶有典型的任何Linux發行版。

+0

這是一個不錯的選擇,非常感謝。否則我會像下面那樣死於腳本;):P。 – Xander 2012-04-16 05:38:26