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