Jawaban:
dirname $file
adalah apa yang Anda cari
dirname "$file"
, lebih tepatnya. Tanpa tanda kutip ini akan berperilaku tidak semestinya jika nama file atau direktori memiliki spasi.
dirname $file
akan mengeluarkan
stuff/backup
yang merupakan kebalikan dari basename
:
basename $file
akan menghasilkan
file.zip
Menggunakan ${file%/*}
seperti yang disarankan oleh Urvin / LuFFy secara teknis lebih baik karena Anda tidak akan bergantung pada perintah eksternal. Untuk mendapatkan nama dasar dengan cara yang sama seperti yang Anda lakukan ${file##*/}
. Tidak perlu menggunakan perintah eksternal kecuali Anda perlu.
file="/stuff/backup/file.zip"
filename=${1##*/} # file.zip
directory=${1%/*} # /stuff/backup
Ini juga akan sepenuhnya sesuai dengan POSIX dengan cara ini. Semoga membantu! :-)
dirname
memiliki keunggulan dibandingkan pendekatan bawaan (lebih efisien), dan itu jika Anda tidak yakin bahwa jalur Anda sepenuhnya memenuhi syarat untuk memulai. Jika sudah file=file.zip
, dirname "$file"
akan kembali .
, sedangkan ${file%/*}
akan kembali file.zip
.
case $file in */*) dir=${file%/*};; *) dir=.;; esac
masih POSIX-y dan mengatasi masalah tersebut.
Untuk mendapatkan directorypath
dari filepath
:
file="stuff/backup/file.zip"
dirPath=${file%/*}/
echo ${dirPath}
Cukup gunakan $ dirname /home/~username/stuff/backup/file.zip
Ini akan kembali /home/~username/stuff/backup/
dirname $file