Jika Anda menggunakan zsh dengan globbing diperpanjang diaktifkan, Anda bisa melakukannya dengan oneliner:
(../)#.git(:h) # relative path to containing directory, eg. '../../..', '.'
(../)#.git(:a) # absolute path to actual file, eg. '/home/you/src/prj1/.git'
(../)#.git(:a:h) # absolute path to containing directory, eg. '/home/you/src/prj1'
Penjelasan (dikutip dari man zshexpn
):
Globbing rekursif
Komponen pathname dari formulir (foo/)#
cocok dengan path yang terdiri dari nol atau lebih direktori yang cocok dengan pola foo. Sebagai steno, **/
setara dengan (*/)#
.
Pengubah
Setelah penunjuk kata opsional, Anda dapat menambahkan urutan satu atau lebih dari pengubah berikut, masing-masing didahului oleh ':'. Pengubah ini juga bekerja pada hasil pembuatan nama file dan perluasan parameter, kecuali jika disebutkan.
- Sebuah
- Ubah nama file menjadi jalur absolut: tambahkan dulu direktori saat ini, jika perlu, dan selesaikan segala penggunaan '..' dan '.'
- SEBUAH
- Sebagai ' a ', tetapi juga selesaikan penggunaan tautan simbolik jika memungkinkan. Perhatikan bahwa resolusi '..' terjadi sebelum resolusi tautan simbolik. Panggilan ini setara dengan kecuali sistem Anda memiliki
realpath
panggilan sistem (sistem modern lakukan).
- h
- Hapus komponen trailing pathname, biarkan kepala. Ini berfungsi seperti '
dirname
'.
Kredit: Faux
aktif #zsh
untuk saran awal penggunaan (../)#.git(:h)
.