我的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
有人可以帮我解决其中一个或两个问题吗?
答案 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
获取更多信息。