簡體   English   中英

從bash中的完整文件路徑獲取父目錄名稱和文件名而沒有擴展名?

[英]Get parent directory name and filename without extension from full filepath in 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

要將它們讀入shell變量:

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

第一部分可以通過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
$ 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM