使用回显打印的每一行都包括给定文件所在目录的正斜杠。我正在尝试使用cut命令来剪切正斜杠,但它不起作用。这些文件是用gzipped压缩的,所以它们的扩展名是.gz。
#!/bin/bash
for filename in /data/logs/2017/month_01/201701*
do
echo $filename
cut $filename -d '/' -f1
done提前谢谢。
发布于 2017-05-12 16:31:10
命令顺序错误。您需要通过管道(|)或here-strings(<<<)将字符串输入流式传输到cut命令。
echo "$filename" | cut -d '/' -f1(或)
cut -d '/' -f1 <<<"$filename"(或)使用此处-docs
cut -d '/' -f1 <<EOF
$filename
EOF数据
不要忘了用双引号将变量括起来,以避免外壳执行Word-Splitting。
发布于 2017-05-12 16:56:44
假设文件名是/a/b/c.gz,你只是想要c.gz?
有两个非常简单的答案:
basename $filename另一种是:
echo ${filename##*/}后者使用了bash内置的字符串删除参数扩展。
另一种解决问题的方法是,你可以先更改目录,即
#!/bin/bash
pushd /data/logs/2017/month_01
for filename in 201701*
do
echo $filename
done
popd参考资料:
(编辑:修复了@123标识的拼写错误)
发布于 2017-05-12 16:47:43
正如建议的那样,b @lnian命令通过管道符号与echo命令一起使用,以便只获取您需要使用的脚本的文件名。
带有-f1选项的cut将获得/之前的第一个值,该值将为空,因此您需要从文件名中获取最后一个值。
#!/bin/bash
for filename in /data/logs/2017/month_01/201701*
do
echo "$filename" | rev| cut -d '/' -f1
donerev命令反转文件名,这样您将获得最后一个值,即您的文件名
https://stackoverflow.com/questions/43932854
复制相似问题