我开发了一共linux的shell,功能是将一个目录中的文本文件改名,shell如下:#!/bin/bash
DATA_DATE=$1
cd /home/Oracle/file2/${DATA_DATE}/
for fileName in `ls *${DATA_DATE}.dat`
do
newName=`echo $fileName|sed 's/\_20190905.dat/.dat/g'`
echo ${newName}
mv /home/Oracle/file2/${DATA_DATE}/${fileName} /home/Oracle/file2/${DATA_DATE}/${newName}
done其中 newName=`echo $fileName|sed 's/\_20190905.dat/.dat/g'` 这一行的20190905这个日期参数我一直无法正确的参数话,目前的解决办法是直接写日期,请问正确的参数化应该怎么写?

解决方案 »

  1.   

    date命令,你这种格式用 date +%Y%m%d 就行了,就是以你这种格式显示今天的日期。
    要显示成2019-09-05  就是date +%Y-%m-%d
    还有-d选项比较常用,比如显示昨天的日期  date -d "1 day ago" +%Y%m%d   或者date -d "yesterday" +%Y%m%d
    还有显示小时分钟秒的,星期的,可以看下date命令的帮助
      

  2.   

    你的意思是变了放在sed里面没有被识别?可以把单引号改成双引号,变量就可以识别了或者你可以用rename    rename ${DATA_DATE}.dat .dat *.${DATA_DATE}.dat 
    格式rename   .txt                 .bak               *.txt               把所有.txt结尾的文件后缀,改成.bak
                       修改前的        修改后的          需要修改的文件