考虑文件是:
/home/dev/a1234.txt
我想将此文件复制到 /home/sys/ 目录中,但我想在复制时在文件名上添加一些数字。Date1=date +%Y%m%d_%H:%M:%S
输出应该是:
/home/sys/a1234.txt.$Date1
文件名“1234”上的数字每次都会不同。所以文件名不固定。
请建议。
这样的事情应该让你上路:
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
您可以通过查看文件是否已被复制来改进它,并防止它被第二次复制。
NAME=a1234.txt
cp dev/$NAME sys/$NAME.$Date1
使用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
i
0
在此示例中从to递增4
,而表单的文件名从to$NAME$i.$EXT
复制- 将当前日期附加到副本文件名的末尾。$FROMDIR
TODIR
$DATE
分两步:
将文件复制到/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