BASH:复制多个文件并显示需要多长时间

时间:2015-06-29 12:27:07

标签: bash time copy cp

我的bash脚本中有一行如下:

cp -v /temp1/* /temp2/* >> $LOGFILE

$ LOGFILE基本上就是 - 一个日志文件。我目前在$ LOGFILE中获得的结果是:

‘/temp1/file1’ -> ‘/temp2/file1’
‘/temp1/file2’ -> ‘/temp2/file2’
‘/temp1/file3’ -> ‘/temp2/file3’
‘/temp1/file4’ -> ‘/temp2/file4’

首先,我想摆脱前缀“—和尾随“—。其次,我想要显示当前时间(以hh:mm格式)或已用时间,以便$ LOGFILE显示:

10:24 /temp1/file1 -> /temp2/file1
10:27 /temp1/file2 -> /temp2/file2

00:03 /temp1/file1 -> /temp2/file1
00:27 /temp1/file2 -> /temp2/file2

有人可以帮我解决其中一个或两个问题吗?

2 个答案:

答案 0 :(得分:0)

我认为‘’代替'或"是由于编码问题(例如参见here)。你用什么打开$ LOGFILE?尝试使用cat $LOGFILE

您可以使用以下内容:

for fn in /temp1/*
do
    #hour and minutes
    d=$(date +%H:%M)
    # cp output
    c=$(cp -v $fn /temp2/)
    # echo
    echo $d $c >> $LOGFILE
done

答案 1 :(得分:0)

我相信你必须为此使用一个循环,并逐个复制文件,然后在每个副本之前手动打印日期:

(for i in test1/*; do \
   printf "%s: " $(date +"%M:%S"); \
   cp -v $i ${i/test1/test2} | sed "s|[\`\']||g"; \
 done) >> log.file

您看到的有趣角色是由您的终端编码引起的。它们是`和'的等价物,所以我提供的sed语句应该可以工作(不能在本地测试,因为我没有你正在使用的任何编码)。

-----编辑-----

如果您想在目录下找到所有文件(不仅仅是直接在test1中的文件),您可以find使用-exec,如下所示:

find test1 -type f -exec printf "%s: " $(date +"%M:%S") \; -exec echo {} \;

这将找到所有文件,并为每个文件运行两个命令。 {}扩展为找到的文件名。 \;告诉我发现命令已完成。请man find获取更多信息。