Bul, sembolik yolda çalışmıyor?


15

Bu komutu çalıştırırsam find $HOME/MySymlinkedPath -name "run*.sh"hiçbir şey olmaz ve hata vermez ('MySymlinkedPath' benim $ HOME olandan başka bir sabit sürücüye sembolik bir yoldur).

Bunlar da başarısız olur:

find ~/MySymlinkedPath -name "run*.sh"
find /home/MyUserName/MySymlinkedPath -name "run*.sh"

Ve sadece emin olmak için, bu olmayan yol başarısız olur (elbette), find $HOME/MySymlinkedPathDUMMYTEST -name "run*.sh"böylece yol bulunur (çünkü bu hata gerçekleşmez), ancak findüzerinde arama yapmaz ve şimdi çok clueless.

Sadece cd $HOME/MySymlinkedPathilk önce böyle bir yol başvurusunu kaldırırsam çalışır, find -name "run*.sh"ancak komut dosyalarım için iyi değildir.

Ek bir bilgi :
bu komut her zamanki gibi çalışır ls $HOME/MySymlinkedPath/run*.shve oraya gidip cd $HOME/MySymlinkedPathçalıştırırsam ls ..sonuç beklediğim şey değildir - sembolik yolun bulunduğu yolun listesi - gerçek yolun listesini döndürür başka bir medya / sabitdisk !!!

pwd -P
/media/MediaIdentifier/RealPath
pwd
/home/MyUser/MySymlinkedPath

Yeniden düşünme :
Bu , sistemimle findve lssistemimle ilgili bir sorun mu var? ya da beklenen ve hiç bir sorun değil ?? Ubuntu 12.10 kullanıyorum. Test ettiğim tüm terminallerde başarısız, bu yüzden bir terminal "sorunu" gibi görünmüyor.


1
Daha iyi bir cevap buldum "find -follow". stackoverflow.com/questions/105212/…
Jarod

@Jarod man sayfası -follow'un kullanımdan kaldırıldığını söylüyor ve aşağıdaki cevabımda olduğu gibi -L (yani --follow) kullanmalıyız:>
Aquarius Power

Yanıtlar:


20

İşte cevap. Ancak bu soru, sorunun hedefi bash'a işaret ediyor.

Açıklama bu findbulur "$HOME/MySymlinkedPath". Bu bir dizin değil, sembolik bir bağlantıdır, bu nedenle yinelemeli iniş orada durur. İfade eşleşirse "$HOME/MySymlinkedPath"(örneğin, içinde find "$HOME/MySymlinkedPath" -name 'My*'), findbunu bir eşleşme olarak yazdırır.

Orada işaret ettiği gibi, onunla başa çıkmanın ve tüm komut dosyalarını düzeltmenin en kolay / temiz yolunun, bunun yerine olduğunu buldum:

find "$HOME/MySymlinkedPath" -name "run*.sh"

sadece bir eğik çizgi ekleyin, böylece findsembolik bağlantıdan değil, sembolik bağlantının hedefinden başlar:

find "$HOME/MySymlinkedPath/" -name "run*.sh"

Alternatif olarak, komut satırından geçen sembolik bağları geçmesini söylemek için -Hseçeneği find(yollardan önce önce gelmesi gerektiğini unutmayın) iletin. (Bu farklıdır -Lanlatan findsıra yinelemeli iniş sırasında karşılaşılan sembolik bağlantıları hareket için).

find -H "$HOME/MySymlinkedPath" -name "run*.sh"

Ve nihayet burada en iyi şekilde çalıştı -L(birkaç dosya sistemi nedeniyle klasörlere bağlandım). Ama bu yüzden ekledi sorun olmayan hata iletileri bir sürü üretir 2>/dev/null; ve ayrıca bu takma adı oluşturmaya karar verdi alias find='find -L':

find -L "$HOME/MySymlinkedPath" -name "run*.sh" 2>/dev/null

2
IMHO, aslında dizin olduklarını belirtmek için dizinlerden sonra eğik çizgi kullanmak genellikle iyi bir uygulamadır. :) Daha okunaklı hale
getirir
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.