OS X’te bir ağ birimi için bir konum bulma veritabanı oluşturmak mümkün mü?


0

Bir ağ birimindeki milyonlarca dosyayı hızlıca arayabilmem gerekiyor ve doğrudan arama yapmak yerine bilgileri bir veritabanında aramak istiyorum.

“Kendiminkini yuvarlamak” yerine, bir veritabanı kullanmak locateveya kullanmak mantıklı görünüyor, mlocateancak bir AFP ağına bağlı birim (veya bu konuda SMB) alabildim locateveya mlocateçalışamadım.

Bir önerisi olan var mı? locate.rcDosyayı düşünebildiğim bütün kombinasyonlarda değiştirdim ancak AFP ro SMB'nin FILESYSTEMS hattı için kabul edilemez olduğundan şüpheliyim.

FILESYSTEMS="hfs ufs afp"

NFS'yi satın almayı denedim. Bir Mac'ten bağlantı kabul edecek şekilde ayarlayabilmek için sunucuya erişimim yok (etki alanı seçeneklerinden biri olarak “güvensiz” ayarlamanız gerekiyor gibi görünüyor).


mdfindBunun yerine (Ie Spotlight) kullanmayı düşündünüz mü ?
Asmus,

Yanıtlar:


1

Görünüşe göre, locate.updatedb dizinini, bağlı ağ dahil diğer dosya sistemlerini indekslemek mümkün.
Yakalama, dosya sisteminin kökünün (ve indekslenmesini istediğiniz içeriğe kadar olan ağacın) kullanıcı / grup "hiç kimse" tarafından okunabilmesi gerektiğidir.

/Etc/locate.rc ile doğru yoldaydınız

Bundan sonra /usr/libexec/locate.updatedb'nin indeksi oluşturmak için sadece find kullandığını öğrendim.
/Etc/locate.rc FILESYSTEMS içindeki girdiler arasında dolaşır (en azından 10.6'da, bu ayarlanmamışsa, sadece hfs olur).

find's man sayfası, makinenizde neyin geçerli olduğunu bulmak için "sysctl vfs" kullanılmasını önerir. Benim durumumda:

sysctl vfs|grep mounted
vfs.nfs has 1 mounted instance
vfs.hfs has 3 mounted instances
vfs.autofs has 3 mounted instances
vfs.afpfs has 4 mounted instances

Bunu doğrulamak için bazı hızlı testler:

prowler:~%% mount |grep Volumes/keen
afp_1I6KyU4igzg00Q0vsj4E2G0H-1.2f0004fb on /Volumes/keen (afpfs, nodev, nosuid, mounted by keen)
prowler:~%% touch /Volumes/keen/test-afpfs
prowler:~%% find /Volumes/keen/ -name test-afpfs -fstype afpfs
prowler:~%% find /Volumes/keen/test-afpfs -name test-afpfs -fstype afpfs
/Volumes/keen/test-afpfs
prowler:~%% find /Volumes/keen/test-afpfs -name test-afpfs -fstype hfs
prowler:~%% 

10.6 için, en azından afpfs, AFP'ye bağlı bir dosya sistemi için doğrudur.

Şimdi afpfs'in başarısızlığına.

OSX (10.6), AFP birimini (bir giriş öğesiyle veya Bulucu -> Git -> sunucuya bağlan - AFP için geleneksel OSX mekanizmalarıyla monte edilir) monte ettiğinde, bunu yalnızca kullanıcı tarafından okunabilir şekilde bağlar:

prowler:/Volumes/keen%% ls -ld /Volumes/keen
drwx------  6 keen  keen  264 Dec 13 12:45 /Volumes/keen/

ve bu el ile düzeltmeye çalışmak başarısız olur:

prowler:/Volumes/keen%% sudo chmod a+rx /Volumes/keen
prowler:/Volumes/keen%% ls -ld /Volumes/keen
drwx------  6 keen  keen  264 Dec 13 12:52 /Volumes/keen/

Henüz bir geçici çözüm bulamadım (autofs denemedim, çünkü bu yöntem her OSX sürümünde bozulma eğiliminde ...).

takılan hfs (ve muhtemelen hfs +, vb.) birimlerinin bu sorunu yoktur ve Disk Yardımcı Programı -> NFS Bağlayıcıları (10.6) aracılığıyla bağlanan NFS birimleri de yoktur.

prowler:~%% mount |grep nfs
murf:/backups on /Users/keen/backups (nfs, nodev, nosuid, automounted, nobrowse)
prowler:~%% ls -ld /Users/keen/backups
drwxrwxrwx  33 root  wheel  2048 Dec 13 03:05 /Users/keen/backups/

Bunu sadece afp mountun indeksleme dizinini bulmaya çalışırken buldum:

prowler:/Volumes/keen%% grep FILESYSTE /etc/locate.rc 
FILESYSTEMS="afpfs"

prowler:/Volumes/keen%% sudo /usr/libexec/locate.updatedbshell-init: error retrieving current directory: getcwd: cannot access parent directories: Permission denied
shell-init: error retrieving current directory: getcwd: cannot access parent directories: Permission denied
shell-init: error retrieving current directory: getcwd: cannot access parent directories: Permission denied
find: .: Permission denied

Afp mount dışında $ PWD ile çalıştırmak bu hatayı almadı:

prowler:~%% sudo /usr/libexec/locate.updatedb
prowler:~%% 

ama aynı zamanda herhangi bir sonuç yoktu:

prowler:~%% locate test-afpfs
prowler:~%% 

Yani şimdiye kadar bulduğum kısa cevap - EVET! OSX'te ağ birimlerini endekslemek için yerini bulabilirsiniz. NO, bir afp ağ hacmini endeksleyemezsiniz.


Bunu kontrol etmek için zamanım olmadı, ancak üzerinden okumak en iyi çözüm gibi görünüyor, bu yüzden bunu kabul edeceğim. FWIW, sorunumu çözmek için doğrudan NAS sunucusuna mlocate yükledim ve ardından veritabanını paylaşılan birimde göstererek veritabanını doğrudan açmayı mümkün kıldım.
tom stratton

ha, güzel numara! Şu an için kök salma yoluna gittim ... tabii ki, 6T ile nfs ve afp bağları arasında indeksleme, biraz zaman aldı! Başka bir rota onları iki kez monte etmek olacaktır - bir kez yerini belirlemek için nfs ve bir kez osx dostu olmak için afp, sanırım.
keskin

0

Eğer milyonlarca dosyayı aramaya çalışıyorsanız, muhtemelen komut satırından grep gibi bir şey kullanmak istersiniz. Paylaşıma / volumes / sharename yoluyla erişirsiniz (SMB veya AFP üzerinden bağlanmanız şartıyla).

#Print the files to screen:
grep -rI 'textstring' /Volumes/sharename/folder/

#capture the search in a file:
grep -rI 'textstring' /Volumes/sharename/folder/ > ~/desktop/searchResults.txt

* Çok gevşek bir aramanız varsa, eşleşen tüm dosyaları yakalayacağından bu oldukça büyük olabilir.

Sadece bir dosyayı bulmaya çalışıyorsanız, bu şekilde arama yapabilirsiniz.

#display the results onscreen for a file ending in 'txt'
find /Volumes/sharename/folder -name '*txt'

#capture the results in a file on your desktop.
find /Volumes/sharename/folder -name '*txt' > ~/desktop/findResults.txt

* Çok gevşek bir aramanız varsa, eşleşen tüm dosyaları yakalayacağından bu oldukça büyük olabilir.

Tüm dosyaları depolamak için bir veritabanı kullanabilirsiniz, ancak veritabanı depolandıkları sistemin büyüklüğü olacaktır ve bunu yaparak dosya sisteminin işlevselliğini çoğaltmış olursunuz.

Alternatif olarak, rsync kullanılarak oluşturulan yerel bir dosya setini aramak olabilir. Ana makinede bir rsync arka plan programı yoksa, erişebildiğiniz tüm dosyalara hala sahip olabilirsiniz. Yine madencilik yaptığınız dosyalar kadar alana ihtiyacınız olacak.


bulmak hiç hızlı DEĞİLDİR ve tam olarak kaçınmaya çalıştığım komuttur ... grep, dosya adlarını değil dosya içeriğini işler. Bir ls komutunu grep'e aktarmak ve bu şekilde arama yapmak mümkündür, ancak dosya adlarını hala ağ bağlantısı hızında işlemden geçiriyorsunuz. Bir veritabanı bulmaya çalışmanın amacı, önerdiğiniz çözümü engellemektir - bir şey mi eksik?
tom stratton,
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.