linux - 使用 sed 或 awk 重命名多个文件

标签 linux bash awk sed

我有一个 DVR 录像机,可以使用特定名称将文件发送到我的 linux ftp 服务器,但我需要更改为其他名称格式,以便它们可以在旧软件上使用。 原始文件采用以下格式:

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 或 ark 来完成,但这超出了我的知识范围。

提前致谢

最佳答案

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

关于linux - 使用 sed 或 awk 重命名多个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29896916/

相关文章:

r - 在 Linux 上为 R 安装 PostgreSQL 包时没有这样的文件错误 libpq-fe.h

linux - 与 C++ 初始值设定项有关的内存一致性

java - 将windows bat文件翻译成linux shell脚本

regex - awk 跳过空行

linux - "share"子目录应该包含什么?

linux - 如何反编译 ELF 32 位 LSB 可执行文件?

linux - tar 查询 :How to speedup tar for many files in . tgz 文件

java - subprocess.Popen 的奇怪执行模式

linux - 用 awk 替换 sql 列

linux - 使用命令的输出来喂另一个