使用变量搜索文件名并替换为另一个变量

时间:2014-01-25 15:09:48

标签: shell unix sed awk

我在一个变量($ 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"

提前致谢

1 个答案:

答案 0 :(得分:0)

方法1

我通常使用sed创建mv命令,然后将输出传递给sh。这种方法允许我查看将事先执行的命令。

例如:

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

一旦你对上一个命令的输出感到满意;重复它并将它的输出传递给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}