Mac Terminali “find” komutu: Sonuç çıktısında çift eğik çizgi ne anlama geliyor?


9

Büyük ve iç içe dizin yapılarında arama yapmak için find-komutunu kullanıyorum.

Sonuç çıktısında bazen çift eğik çizgi (//) bulunur.

Örnek ("İndirilenler" den sonra):

#> find ~/Downloads/ -iregex ".*some.*"
/Users/michael/Downloads//subDirectory/some_file.pdf

İlk olarak mevcut çalışma dizinini işaretleyeceğini düşündüm. Ama durum böyle değil.

Bu çift eğik çizginin anlamı nedir?

Genellikle sonucu panoya kopyalarım, bulucuya değiştiririm. Sonra "+" komutunu "+" g "kaydırın ve yolu (dosyaya kadar) kutuya yapıştırın. Böylece içeren dizin açılır.

İyi çalışıyor. Ama çift eğik çizgi manuel olarak kaldırmak zorundayım.

Bu nedenle: Nasıl önleyebilirim?


2
Çift eğik çizgiyi kaldırmanız gerekmediğini unutmayın. Çift eğik çizgi yalnızca bir yolun başlangıcında ve yalnızca tam iki eğik çizgi olduğunda özeldir . Ortada veya sonunda çoklu eğik çizgiler veya başlangıçta tam olarak ikiden fazla herhangi bir eğik çizgi bir eğik çizgiye tam olarak eşdeğerdir. Bu POSIX / SUS spesifikasyonu ile garanti edilir.
Jörg W Mittag

Yanıtlar:


17

findgerçek anlamda. "~ / Downloads /" içinde arama yapmasını söylediğinizde, onu (sondaki eğik çizgi dahil) bulduğu her şeyin öneki olarak kullanır. Verdiğiniz yolun sonunda gereksiz ve alakasız bir eğik çizgi olduğundan, çıktıda gereksiz ve alakasız bir ekstra eğik çizgi ile sarılırsınız.

Çözüm: sondaki "/" arama dizininden kaldırın:

#> find ~/Downloads/ -iregex ".*some.*"
/Users/michael/Downloads//subDirectory/some_file.pdf
#> find ~/Downloads -iregex ".*some.*"
/Users/michael/Downloads/subDirectory/some_file.pdf

4

Bu çift eğik çizginin anlamı nedir?

Garip eski BSD bulmak kullandığınız anlamına gelir.

Nasıl önleyebilirim?

Gerçekten orijinal komutunuzda eğik çizgiyi atlayabilirsiniz, ancak sekme tamamlama yoluyla otomatik olarak eklendiğinden (kesinlikle mümkün olduğunca fazla kullanmalısınız) ve izleyen eğik çizgi aslında başka yerlerde sayısız yerlerde kullanıldığından emin olmak için bir dosya adı ile değil, bir dizinle uğraşıyorsanız, bunun mantıksız ve aptal olduğunu göz ardı ederek.

Bunun yerine, aşağıdakilerden birini yapmanızı öneririm:

a) Boruların sed olacağını bulmak için bir sarıcı yapın: | sed 's @ // @ / @'

b) GNU'nun bulucularını 'demlemek kurulum bulucuları' ile yükleyin ve sonra ya doğrudan 'gfind' kullanın, 'gfind' için 'find' kullanın ya da yolunuza / usr / local / opt / findutils / libexec / gnubin ekleyin ( GNU findutils '' locate ',' updatedb 've' xargs ').

c) Bu sorunla karşılaşmayacak (ve bin kişi) uygun bir GNU / Linux işletim sistemine geçin. : p


1
Sadece ekleyin set mark-directories off. inputrcve gitmekte fayda var. O yaşlı BSD adamlarından birinden.
fd0

@ fd0, aynı isimle dirs ve dosyalar arasında ayrım yapamazdı; BSD'nin bulduğu şey, burada bash veya readline değil, biraz acımasız
Jan Kyu Peblik
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.