Genişletilmiş globbing etkinleştirilmiş bir zsh kullanıyorsanız, bir oneliner ile yapabilirsiniz:
(../)#.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'
Açıklama (alıntı yapılan man zshexpn
):
Özyinelemeli Küreselleşme
Formun bir yol adı bileşeni, (foo/)#
foo deseni ile eşleşen sıfır veya daha fazla dizinden oluşan bir yolla eşleşir. Bir kestirme olarak, **/
eşittir (*/)#
.
Düzenleyiciler
İsteğe bağlı sözcük tanımlayıcısından sonra, her biri ':' ile gösterilen aşağıdaki değiştiricilerden birini veya daha fazlasını içeren bir dizi ekleyebilirsiniz. Bu değiştiriciler ayrıca, belirtilenler dışında dosya adı oluşturma ve parametre genişletme işlemlerinin sonucu üzerinde çalışır.
- bir
- Bir dosya adını mutlak bir yola dönüştürün: gerekirse geçerli dizini hazırlar ve '..' ve '.'
- bir
- ' A ' olarak, ancak mümkün olduğunda sembolik bağların kullanımını da çöz. Sembolik linklerin çözünürlüğünden önce '..' çözünürlüğünün oluştuğunu unutmayın. Bu çağrı, sisteminizde
realpath
sistem çağrısı olmadıkça (modern sistemler yapar) eşdeğerdir .
- h
- Baştaki bırakarak takip eden bir yol adı bileşeni çıkarın. Bu '
dirname
' gibi çalışır .
Kredi: Faux
kullanım #zsh
ilk önerisi için açık (../)#.git(:h)
.