2015-02-09 210 views

回答

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 

讀取它們到殼變量:

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

我不知道這意味着什麼。你能將結果(dirname和文件名沒有最後的擴展名)存儲到兩個變量中:'file'和'fol​​der'嗎?這樣我可以做一些有用的事情。謝謝。 – becko 2015-02-09 19:50:37

+0

我也用BASHism更新了答案。您可以使用:'file =「$ {p%。*}」''和'fol​​der =「$ {d ## * /}」'而不是上面的'echo'語句。 – anubhava 2015-02-09 19:53:08

2

第一部分可以通過基名來解決(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 
$ 
相關問題