从 shell 脚本中的路径获取文件名的日期部分

get the date part from filname from a path in shell script

我有一个脚本如下

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

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

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

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

你为获取文件名做了大量工作

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

当你说:

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