如何将动态字符串附加到副本文件名的末尾

时间:2013-06-25 12:38:49

标签: unix sed awk

考虑文件是:

/home/dev/a1234.txt

我想在/ home / sys /目录中复制此文件,但我想在复制时在文件名上添加一些数字。 日期1 = date +%Y%m%d_%H:%M:%S 输出应该是:

/home/sys/a1234.txt.$Date1 

文件名“1234”上的数字每次都不同。所以文件名不固定。

请建议。

4 个答案:

答案 0 :(得分:1)

这样的事情可以帮助你:

for i in $( ls /home/dev | grep 'a[0-9]*.txt$'); do
    cp /home/dev/$i /home/sys/$i.`date +%Y%m%d_%H:%M:%S`;
done

您可以通过查看文件是否已被复制来改进它,并防止第二次复制该文件。

答案 1 :(得分:0)

分两步:

  • 将文件复制到/home/sys

    cp /home/dev/a1234.txt /home/sys
    
  • a1234.txt移至a1234.txt.130625。通过这种方式,您可以更加通用。

    mv /home/sys/a1234.txt{,$date} #is expanded to mv /home/sys/a1234.txt /home/sys/a1234.$date
    

如您所示,您的文件名将发生变化,您可以使用$file_name代替a1234.txt来推广我的答案。

测试

$ touch a
$ date=23
$ mv aa{,$date}
$ ls
aa23

答案 2 :(得分:0)

NAME=a1234.txt
cp dev/$NAME sys/$NAME.$Date1

答案 3 :(得分:0)

使用date命令获取当前日期。

$ DATE=`date +%Y%m%d_%H:%M:%S`; NAME=a; EXT=txt; for i in {0..4}; do echo $NAME$i$.$EXT.$DATE; done
a0.txt.20130625
a1.txt.20130625
a2.txt.20130625
a3.txt.20130625
a4.txt.20130625

echo行更改为cp

$ DATE=`date +%Y%m%d_%H:%M:%S`; FROMDIR=/home/dev; TODIR=/home/sys; NAME=a; EXT=txt; for i in {0..4}; do cp $FROMDIR/$NAME$i.$EXT $TODIR/$NAME$i$.$EXT.$DATE; done

这在bash脚本中可能更好,你可以比单个衬里更容易地修改它:

#!/bin/bash

# get current date
DATE=`date +%Y%m%d_%H:%M:%S`;

# specify from directory and to directory for cp
FROMDIR=/home/dev;
TODIR=/home/sys;

# set base filename and extension
NAME=a;
EXT=txt;

# count from 0 to 4
for i in {0..4}; do
    # copy file and add date to end of new filename
    cp $FROMDIR/$NAME$i.$EXT $TODIR/$NAME$i$.$EXT.$DATE;
done
在此示例中,

i0增加到4,而$NAME$i.$EXT形式的文件名从$FROMDIR复制到TODIR - 将$DATE中的当前日期附加到副本文件名的末尾。