首页 > 解决方案 > 提取部分列以制作 cp 命令

问题描述

我想创建复制命令来将文件从一个目录复制到它的后面,并删除后缀日期。那里有多个文件。

例如文件LOAN.DAILY.20191204

想创建命令

cp LOAN.DAILY.20191204 ../LOAN.DAILY

我的尝试

ls -lrt | awk ' /DAILY/{ print "cp " , $9 , "../" , sub(/\.20191204$/,""); $9 }'

获得输出

cp  LOAN.DAILY.20191204 ../ 1

为什么这个 1 来了

标签: awksed

解决方案


这可能对您有用(GNU sed):

ls *DAILY* |  sed -E 's#^(.*)\..*#cp & \1#'

一旦检查了输出,就使用这个版本来制定副本。

ls *DAILY* |  sed -E 's#^(.*)\..*#cp & \1#e'

或使用 GNU 并行的替代方法:

parallel --dry-run cp {} {.} ::: *DAILY*

再次检查结果,如果一切正常,请使用:

parallel cp {} {.} ::: *DAILY*

推荐阅读