2013-04-27 27 views
0

我需要將一個目錄中的一批文件重命名爲文件內容第一行上的反引號之間的字符。如何將一批文件重命名爲每個文件第一行中存在的名稱

文件名:schema.stored.procedure302
文件中 第一行寫着:

/* Procedure structure for procedure `usp_stored_procedure_abc` */ 

所需的新文件名:usp_stored_procedure_abc.sql


下面是場景更多一點細節:

我有一個schema.sprocs.sql文件,其中只包含來自mysqldump的存儲過程。

我用csplit可將文件分割成300多個單獨的SQL文件

csplit -f schema.stored.procedure schema.sprocs.sql '/Procedure structure for procedure/' {*} 

這工作出色,現在我所擁有的文件是這樣的:

schema.stored.procedure302
schema.stored .procedure303
schema.stored.procedure304
等...

我需要幫助的是:
我可以用它來讀取每個文件的內容,發現該模式命令:

/* Procedure structure for procedure ` 

然後將文件與採用同樣的模式,直到反引號字符重新命名被發現。

例如:

文件schema.stored.procedure302 包含第一行上以下行:

/* Procedure structure for procedure `usp_stored_procedure_abc` */ 

我需要的文件進行重命名爲:usp_stored_procedure_abc.sql(內容在文件內容的第一行的反引號之間)。

我相信這是可行的,有人可以幫助我嗎?

回答

3

以下字符串顯示,我們如何讓我們的新文件名:

head -n 1 file |awk -F'[`]' '{print $2".sql"}' 

完整的腳本會是這樣:

#!/bin/bash 
for f in *; 
do 
    d="$(head -n 1 $f |awk -F'[`]' '{print $2".sql"}')" ; 
    if [ ! -f "$d" ]; 
    then 
    mv "$f" "$d" 
    else echo "File '$d' already exists! Skiped!" 
    fi 
done 
+0

由於N158我知道這是可能的,你的解決方案得很完美。 – sqletom 2013-04-28 02:10:10

相關問題