2015-04-27 76 views
-1

多個文件我有一個將文件發送到我的Linux FTP服務器具有特定名稱的DVR錄像機,但我需要更改爲另一個名稱格式,這樣他們就可以在舊的軟件一起使用。 原始文件來使用此格式:重命名使用awk或者sed

DVR_ch1_principal_20150427094000_20150427100000.dav 

DVR=Device Name 
ch1=channel# 

principal=stream type 

20150427094000=starting date in year,month,day,hour,minute,second format 

20150427100000=end date in year,month,day,hour,minute,second format 

我需要修改的所有文件夾中,以這種格式:

ch1_09.04.00-10.00.00.dav 

ch1=channel# 

09.04.00=starting time in hh.mm.ss 

10.00.00=end time in hh.mm.ss 

我知道它可以使用SED或方舟來完成,但它是超越我的知識。

在此先感謝

+2

誰upvoted這?? –

+1

@JID我經常問自己。 – hek2mgl

回答

0

AWK & bash的版本:

for FNAME in $(ls -1 *.dav) 
    do 
    channel=$(echo ${FNAME} | awk -F _ '{print $2}') 
    starttime=$(echo ${FNAME} | awk -F _ '{print $4}') 
    endtime=$(echo ${FNAME} | awk -F _ '{print $5}') 
    # 
    echo ${channel} 
    # 
    STARTH=${starttime:8:2} 
    STARTM=${starttime:10:2} 
    STARTS=${starttime:12:2} 
    ENDH=${endtime:8:2} 
    ENDM=${endtime:10:2} 
    ENDS=${endtime:12:2} 
    # 
    echo ${channel}"_"${STARTH}"."${STARTM}"."${STARTS}"-"${ENDH}"."${ENDM}"."${ENDS}".dav" 
    mv -f ${FNAME} ${channel}"_"${STARTH}"."${STARTM}"."${STARTS}"-"${ENDH}"."${ENDM}"."${ENDS}".dav" 
    done 
+0

完美。謝啦! – Luiz

0
sed -n ' 
# ch1_09.04.00-10.00.00.dav 
/^DVR_ch/ { 
    s/.*\(ch[0-9]\{1,\}\).*\([0-9]\{6\}\)_.*\(([0-9]\{6\}.\{4\}\)$/\1-\2-\3 
    s/\([0-9][0-9]\)\([0-9][0-9]\)\([0-9][0-9]\)/\.\2.\3\ 
/g 
    p 
    } 
#ch1=channel 
/=channel/ p 

#=starting date 
/=starting date/ s/[0-9]*\([0-9][0-9]\)\([0-9][0-9]\)\([0-9][0-9]\)=.*/\ 
\1.\2.\3=starting time in hh.mm.ss/p 

#=end date 
/=starting date/ s/[0-9]*\([0-9][0-9]\)\([0-9][0-9]\)\([0-9][0-9]\)=.*/\ 
\1.\2.\3=end time in hh.mm.ss/p 
' YourFile 

自我評價(在Linux GNU POSIX版本,所以 '--posix' SED) 它主要是從線reformating信息