从bash中的完整文件路径获取没有扩展名的父目录名和文件名?

时间:2015-02-09 19:41:58

标签: bash

我有一个很长的文件路径,比如

 /path/to/file/dir1/dir2/file.txt.gz

我感兴趣的是获取没有最后一个扩展名的文件名(即file.txt),以及父目录的名称(dir2,我不希望父路径的完整路径目录,只是它的名字。)

我怎样才能在bash中执行此操作?

2 个答案:

答案 0 :(得分:3)

使用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

将它们读入shell变量:

read folder file < <(awk -F '/' '{sub(/\.[^.]+$/, "", $NF);print $(NF-1), $NF}'<<<"$s")

答案 1 :(得分:2)

第一部分可以通过basename(1)来解决:

$ basename /path/to/file/dir1/dir2/file.txt.gz
file.txt.gz
$ 

dirname(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
$