我是 bash 新手,我正在创建一个脚本,循环遍历目录中的文件并根据文件名的一部分对文件执行某些操作,到目前为止我有以下内容:
#!/bin/bash
DIR="/Users/me/Documents/import/*"
for f in "$DIR"
do
t=??????
echo "Loading $f into $t..."
done
所以$f
会输出类似这样的内容:/Users/me/Documents/import/time_dim-1272037430173
其中,我想要t
相等time_dim
,目录可以是可变长度并且-1272037430173
是固定长度(顺便说一下它是unix时间戳)。
解决这个问题的最佳方法是什么?
答案1
未经测试:
t=`basename $f | sed -e 's/-[0-9]\+$//'`
答案2
你也可以这样做:
$ t=`basename $f|tr -d '[0-9-]'`
或者$ t=`basename $f|gawk -F- '{print $1;}'`
编辑:我误读了这个问题
答案3
What is the best way to go about this?
“最佳”方式,仅使用 bash 内部组件,:)
$ s=/Users/me/Documents/import/time_dim-1272037430173
$ echo ${s%-*}
/Users/me/Documents/import/time_dim
$ t=${s%-*}
$ echo ${t##*/}
time_dim