如何使用cut来压缩文件以从日志文件中排除文件名的路径

时间:2018-02-06 02:24:25

标签: bash shell sh cut

如果批处理文件成功处理,我会打印一个日志文件。第3列显示失败的状态字母“F”或完成的“C”。第5列显示完整路径和批处理文件名。

日志文件输出示例:

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到备份目录,同时保持从没有路径的第5列拉出相同的文件名,只记录文件名。

代码:

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应该使用上面日志文件中的示例输出mnop.dat.gz。

1 个答案:

答案 0 :(得分:0)

捕获输出:

gzip "${f6}" > /backup/batch_backups/"$(cut -c 17-30 <<<"${f6}")".gz

但我认为这比你想要做的更好(XY问题),因为你试图从完整路径获取文件名:

gzip "${f6}" > /backup/batch_backups/"$(basename "${f6}")".gz

您也可以使用${f6##*/}代替basename