Yanıtlar:
dirname $file
aradığın şey
dirname "$file"
, daha doğrusu. Tırnak işaretleri olmadan, dosya veya dizin adında boşluklar varsa bu yanlış davranır.
dirname $file
çıktı verecek
stuff/backup
ki bunun tam tersi basename
:
basename $file
çıktı
file.zip
${file%/*}
Urvin / LuFFy tarafından önerildiği gibi kullanmak , harici bir komuta güvenmeyeceğiniz için teknik olarak daha iyidir. Baz adını yapabildiğiniz şekilde almak için ${file##*/}
. Gerekmedikçe harici bir komut kullanmak gereksizdir.
file="/stuff/backup/file.zip"
filename=${1##*/} # file.zip
directory=${1%/*} # /stuff/backup
Ayrıca bu şekilde tamamen POSIX uyumlu olacaktır. Umarım yardımcı olur! :-)
dirname
vardır ve bu, yolunuzun başlamak için tamamen nitelikli olduğundan emin değilseniz. Eğer varsa file=file.zip
, dirname "$file"
geri dönecek .
, oysa ${file%/*}
dönecektir file.zip
.
case $file in */*) dir=${file%/*};; *) dir=.;; esac
hala POSIX-y'dir ve sorunu çözmektedir.
Basitçe kullan $ dirname /home/~username/stuff/backup/file.zip
Geri dönecek /home/~username/stuff/backup/
dirname $file