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! :-)
dirnamememiliki 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=.;; esacmasih POSIX-y dan mengatasi masalah tersebut.
Untuk mendapatkan directorypathdari 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