我有一个日志文件,如果成功处理批处理文件,则打印。第三列显示" F"的状态字母,用于失败或" C"。第五列显示了完整的路径和批处理文件名。
日志文件输出的示例:
392 02/04/2018:2:00 c 4444 /batchprocessing/abc.dat
444 02/04/2018:3:00 F 4442 /batchprocessing/mnop.dat
3333 02/04/2018:4:00 c 2234 /batchprocessing/xyz.dat
我正在尝试将所有具有" f"状态的批处理文件gzip到备份目录,同时将相同的文件名从第五列中拔出相同的文件名,而没有路径,只有文件名。
代码:
while read -r f1 f2 f3 f4 f5 f6 f7 ; do
if [ "${f3}" = "F" ] ; then
gzip "${f6}" > /backup/batch_backups/"${f6}" cut -c 17-30
else
echo "No Error!"
fi
done < batch.log
cut -c 17-30
仅应拉出文件名,不包括文件的路径。
例如batch_backups使用上面的日志文件输出的示例输出。
捕获输出:
gzip "${f6}" > /backup/batch_backups/"$(cut -c 17-30 <<<"${f6}")".gz
,但我认为这比您想做的(XY问题(要好,因为您正在尝试从完整路径中获取文件名:
gzip "${f6}" > /backup/batch_backups/"$(basename "${f6}")".gz
您也可以使用${f6##*/}
代替basename
。