2014-01-25 84 views
0

我在一個變量($ AUD_DATE)中搜索字符串,並在另一個變量($ YEST_DATE)中替換字符串。我需要使用$ AUD_DATE在文件夾中搜索文件名,然後用$ YEST_DATE替換它。使用變量搜索文件名並用另一個變量替換

我試過使用這個鏈接來做,但它沒有與變量一起工作。 Find and replace filename recursively in a directory

shrivn1 $ AUD_DATE=140101 
shrivn1 $ YEST_DATE=140124 
shrivn1 $ ls *$AUD_DATE* 
NULRL.PREM.DATA.CLRSFIFG.140101.dat NULRL.PREM.DATA.CLRTVEH.140101.dat 
shrivn1 $ ls *$AUD_DATE*.dat | awk '{a=$1; gsub("$AUD_DATE","$YEST_DATE");printf "mv \"%s\" \"%s\"\n", a, $1}' 
mv "NULRL.PREM.DATA.CLRSFIFG.140101.dat" "NULRL.PREM.DATA.CLRSFIFG.140101.dat" 
mv "NULRL.PREM.DATA.CLRTVEH.140101.dat" "NULRL.PREM.DATA.CLRTVEH.140101.dat" 

實際輸出我需要的是預先

mv "NULRL.PREM.DATA.CLRSFIFG.140101.dat" "NULRL.PREM.DATA.CLRSFIFG.140124.dat" 
mv "NULRL.PREM.DATA.CLRTVEH.140101.dat" "NULRL.PREM.DATA.CLRTVEH.140124.dat" 

由於

+0

看起來好像您鏈接的答案有很多有用的例子。 – larsks

+0

你的「實際輸出」看起來不對。 –

+0

@glennjackman:更新了實際產出。 –

回答

0

方法1

我通常創建使用sed和然後管道輸出到SH MV命令。這種方法使我能夠看到預先執行的命令。

例如:

$ AUD_DATE=140101 
$ YEST_DATE=140124 
$ ls -1tr | grep "${AUD_DATE}" | sed "s/\(.*\)/mv \1 \1_${YEST_DATE}" 

一旦你happpy與先前命令的輸出;重複它,管其輸出到SH,像這樣:

$ ls -1tr | grep "${AUD_DATE}" | sed "s/\(.*\)/mv \1 \1_${YEST_DATE}" | sh 

方法2

您可以使用xargs命令。

ls -1tr | grep ${AUD_DATE}" | xargs -I target_file mv target_file target_file${YEST_DATE} 
+0

Thx @rishabh。但第一種方法有一些解析錯誤,第二種方法沒有提供所需的o/p。它只是將$ YEST_DATE附加到文件名。 –

相關問題