获取父目录名称和文件名,但没有扩展名从完整的文件路径在bash中?
问题描述:
我有很长的文件路径,像获取父目录名称和文件名,但没有扩展名从完整的文件路径在bash中?
/path/to/file/dir1/dir2/file.txt.gz
我感兴趣的是得到的文件名没有最后延伸(即file.txt
)和父目录(dir2
的名字,我不想父目录的完整路径,只是它的名字)。
如何在bash中做到这一点?
答
使用bash:
s='/path/to/file/dir1/dir2/file.txt.gz'
file="${s##*/}"
file="${file%.*}"
echo "$file"
file.txt
filder="${s%/*}"
folder="${folder##*/}"
echo "$folder"
dir2
使用awk
:
awk -F '/' '{sub(/\.[^.]+$/, "", $NF); print $(NF-1), $NF}' <<< "$s"
dir2 file.txt
读取它们到壳变量:
read folder file < <(awk -F '/' '{sub(/\.[^.]+$/, "", $NF);print $(NF-1), $NF}'<<<"$s")
答
第一部分可以通过基名来解决(1):
$ basename /path/to/file/dir1/dir2/file.txt.gz
file.txt.gz
$
目录名(1)则正好相反,这是不太你想要什么,但也许你可以使用它作为起点:
$ dirname /path/to/file/dir1/dir2/file.txt.gz
/path/to/file/dir1/dir2
$
当然,你可以随时使用Perl:
$ perl -E 'do { @p=split m|/|; say $p[-2] } for @ARGV' /path/to/file/dir1/dir2/file.txt.gz
dir2
$
我不知道这意味着什么。你能将结果(dirname和文件名没有最后的扩展名)存储到两个变量中:'file'和'folder'吗?这样我可以做一些有用的事情。谢谢。 – becko 2015-02-09 19:50:37
我也用BASHism更新了答案。您可以使用:'file =“$ {p%。*}”''和'folder =“$ {d ## * /}”'而不是上面的'echo'语句。 – anubhava 2015-02-09 19:53:08