2012-06-22 58 views
2

我有我的腳本的一部分:猛砸MV不是目錄

while read line 
do 
code=`echo ${line} | awk '{print $1}'` 
awk -f ${supscript}/rearrange.sh < ${base}/${code} 
mv temp_output* "$code"temp_output* 
done < filelist 

腳本運行;唯一的問題是,當它試圖重命名文件時,我收到以下錯誤消息:

mv: target `pollcodetemp_output*' is not a directory 

也許這是與IFS有關的事情。我試圖在腳本的開頭指定:

IFS=' 
' 

但它不工作。我正在使用Windows文本編輯器,但我已經刪除了該CR。

+0

使用縮進。使用'$()'而不是反引號。引用你的變量。 AWK接受輸入文件名作爲參數而不需要重定向。幾乎總是用'read'使用'-r'。 –

回答

4

最有可能的,你只需要:

mv temp_output* "$code" 

這會在當前目錄中名爲temp_output*中的文件移動到變量$code指定的目錄。

但是,如果$code是一個文件,那麼你需要尋找一個rename命令(有多種版本,有不同的語法),或者你需要使用一個內部循環:

for file in temp_output* 
do mv "$file" "$code$file" 
done 
+1

$ code是一個文件。我去了內部循環解決方案,它工作得很好,並且實現了我所尋找的。非常感謝。 – g256

+0

爲什麼這不與一個文件一起工作,如果它只是一個文件,我們必須使用內部循環? –

+0

@HvovojeT:如果用至少三個參數調用mv並且最後一個參數不是目錄,則只會得到「不是目錄」消息。在上下文中,這意味着glob模式'temp_output *'至少匹配兩個文件名,大概是由'awk'腳本生成的。 –

2

您正試圖將多個文件移動到不是目錄的名稱,這是不可能的。發生這種情況是因爲您似乎試圖從通配符模式重命名通配符模式,這也是不可能的。我不會猜測你想要完成什麼,所以我不能給你任何額外的建議。