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

how to gzip a file using cut to exclude the path of the filename from a log file

我有一个日志文件,可以打印批处理文件是否成功处理。第 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 使用上面日志文件的示例输出。

捕获输出:

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

但我认为这比您尝试做的更好(XY 问题),因为您正在尝试从完整路径获取文件名:

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

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