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