我有一个很长的文件路径,比如
/path/to/file/dir1/dir2/file.txt.gz
我感兴趣的是获取没有最后一个扩展名的文件名(即file.txt
),以及父目录的名称(dir2
,我不希望父路径的完整路径目录,只是它的名字。)
我怎样才能在bash中执行此操作?
答案 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
$