如何使用 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
。
我有一个日志文件,可以打印批处理文件是否成功处理。第 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
。