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

时间:2015-12-09 22:29:25

标签: linux shell unix command-line cp

我需要将当前目录中的每个* .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文件名,然后移动每个文件名。

2 个答案:

答案 0 :(得分:1)

您需要一个循环,以便您可以一次执行一个文件。

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手册页。 "&&"如果第一个存档文件的副本有效,那么idiom只是为了将文件复制到第二个存档名称。

答案 1 :(得分:0)

@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