使用echo打印的每一行都包含给定文件所在目录的正斜杠。我试图使用cut命令剪切正斜杠,但它不起作用。这些文件是gzip压缩的,因此它们具有.gz扩展名。
#!/bin/bash
for filename in /data/logs/2017/month_01/201701*
do
echo $filename
cut $filename -d '/' -f1
done
提前致谢。
答案 0 :(得分:2)
命令的顺序错误。您需要通过管道(cut
)或here-strings(|
)流式传输输入到<<<
命令的字符串。
echo "$filename" | cut -d '/' -f1
(或)
cut -d '/' -f1 <<<"$filename"
(或)使用here-docs
cut -d '/' -f1 <<EOF
$filename
EOF
数据
并且不要忘记双引号变量以避免shell完成Word-Splitting。
答案 1 :(得分:1)
假设文件名为/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确定的拼写错误)