繁体   English   中英

将文件从一个目录移动到另一个目录,并添加到新目录中的每个文件名

[英]Move files from one dir to another and add to each files name in the new directory

我需要将其当前目录中的每个* .lis文件移动到新目录,并添加到文件的现有文件名中,以便应用程序使用新名称提取文件。

例如:

Move /u01/vista/vmfiles/CompressGens.lis and /u01/vista/vmfiles/DeleteOnline.lis
to 
/u01/vista/Migration_Logs/LIS.BHM.P.MIGRATION_LOGS.FBA."$(date '+%m%d%y%H%M%S')"CompressGens.lis
and
/u01/vista/Migration_Logs/LIS.BHM.P.MIGRATION_LOGS.FBA."$(date '+%m%d%y%H%M%S')"DeleteOnline.lis

我在脚本中开始的工作是:

cp -f /u01/vista/vmfiles/*.lis /u01/vista/Migration_Logs/LIS.BHM.P.MIGRATION_LOGS.FBA."$(date '+%m%d%y%H%M%S')"*.lis

/ u01 / vista / vmfiles /目录中有多个* .lis,根据系统和日期,*。lis文件不一定总是相同的。 有时是“ DeleteOnline.lis”和CompressGens.lis,而不是ArchiveGens.lis。 然后第二天是CompressGens.lis和ArchiveGens.lis。

因此,我需要在/ u01 / vista / vmfiles /目录中获取* .lis文件名,然后将每个文件名移动。

您需要一个循环,以便一次可以处理一个文件。

ls -1tr *.lis | while read File
do
    cp -p $File ../Migration_Logs/${File%.lis}.$(date '+%m%d%y%H%M%S').CompressGens.lis &&
    mv $File ../Migration_Logs/${File%.lis}.$(date '+%m%d%y%H%M%S').DeleteOnline.lis
done

$ {File%.lis}是bash / korn剥离后缀的方式-请参见ksh或bash手册页。 如果第一个存档文件的副本有效,则“ &&”成语仅用于将文件转换为第二个存档名称。

@Abe Crabtree,感谢您为我指出正确方向的帮助。 以下是有效的最终代码。

ls -1tr *.lis | while read File
do
    mv $File /u01/vista/Migration_Logs/LIS.BHM.P.MIGRATION_LOGS.FBA.$(date '+%m%d%y%H%M%S').${File%.lis}.lis
done

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM