从shell脚本

时间:2015-08-11 11:33:17

标签: string bash shell filenames filepath

我有一个脚本如下

pathtofile="/c/github/something/r1.1./myapp/*.txt"
echo $pathtofile
filename = ${pathtofile##*/}
echo $filename

我总是在../myapp/目录中只有一个txt文件作为2015-08-07.txt。所以o / p如下:

/c/github/something/r1.1./myapp/2015-08-07.txt
*.txt

我需要提取文件名为2015-08-07。我确实遵循了相同要求的大量堆栈溢出答案。最好的方法是什么,以及如何从该路径获取文件名的唯一日期部分? 仅供参考:每次使用今天的日期执行脚本时,文件名都会更改。

2 个答案:

答案 0 :(得分:2)

当你说:

pathtofile="/c/github/something/r1.1./myapp/*.txt"

您将文字/c/github/something/r1.1./myapp/*.txt存储在变量中。

当您echo时,此*会展开,以便您正确查看结果。

$ echo $pathtofile
/c/github/something/r1.1./myapp/2015-08-07.txt

但是,如果你引用它,你会看到内容确实是*

$ echo "$pathtofile"
/c/github/something/r1.1./myapp/*.txt

所以你需要做的是将值存储在一个数组中:

files=( /c/github/something/r1.1./myapp/*.txt )

files数组将填充此表达式的扩展。

然后,既然你知道数组只包含一个元素,你可以用:

打印它
$ echo "${files[0]}"
/c/github/something/r1.1./myapp/2015-08-07.txt

然后使用Extract filename and extension in Bash获取名称:

$ filename=$(basename "${files[0]}")
$ echo "${filename%.*}"
2015-08-07

答案 1 :(得分:1)

你为获取文件名

做了很多工作
$ find /c/github/something/r1.1./myapp/ -type f -printf "%f\n" | sed 's/\.txt//g'
2015-08-07