Dalam skrip saya, saya memerlukan direktori file yang saya kerjakan. Misalnya, file = "stuff / backup / file.zip" . Saya membutuhkan cara untuk mendapatkan string " stuff / backup / " dari variabel $file
.
123
dirname $file
adalah apa yang Anda cari
dirname $file
dirname "$file"
, lebih tepatnya. Tanpa tanda kutip ini akan berperilaku tidak semestinya jika nama file atau direktori memiliki spasi.akan mengeluarkan
yang merupakan kebalikan dari
basename
:akan menghasilkan
sumber
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.Ini juga akan sepenuhnya sesuai dengan POSIX dengan cara ini. Semoga membantu! :-)
sumber
dirname
memiliki keunggulan dibandingkan pendekatan bawaan (lebih efisien), dan itu jika Anda tidak yakin bahwa jalur Anda sepenuhnya memenuhi syarat untuk memulai. Jika sudahfile=file.zip
,dirname "$file"
akan kembali.
, sedangkan${file%/*}
akan kembalifile.zip
.case $file in */*) dir=${file%/*};; *) dir=.;; esac
masih POSIX-y dan mengatasi masalah tersebut.Untuk mendapatkan
directorypath
darifilepath
:sumber
Cukup gunakan
$ dirname /home/~username/stuff/backup/file.zip
Ini akan kembali
/home/~username/stuff/backup/
sumber