So mounten und benennen Sie ein Volume, wenn es noch nicht mit einem Startskript gemountet wurde

Ich versuche, etwas zu tun, von dem ich dachte, dass es einfach wäre, aber nachdem ich es recherchiert habe, habe ich das Gefühl, dass ich auf halbem Weg bin, ein Yak zu rasieren , also bitte ich um Rat. Ich möchte ein Skript erstellen, mit dem ich und meine Kollegen normale Spolight-Suchen auf einem gemeinsamen Laufwerk durchführen können, was nach Recherchen nicht einfach zu sein scheint und am besten mit einem Skript gelöst wird, das:

  • Wird beim Start ausgeführt (es klingt, als wäre dies am einfachsten, Shell-Skripte beim Start mit Automator starten zu lassen )
  • Überprüft, ob ein Volume mit einem bestimmten Namen gemountet ist (ein Verzeichnis auf einem smb-Shared-Laufwerk auf einem Active Directory-Windows-basierten Shared-Firmenlaufwerk)
  • Wenn dies nicht der Fall ist, mounten Sie es unter diesem bestimmten Namen
  • Indizieren Sie es dann im Rampenlicht, indem Sie seinen Volume-Namen verwenden. Ich glaube, ich habe diesen Teil abgedeckt: mdutil /Volumes/name -i on, anscheinend

Die fettgedruckten Teile sind die Teile, mit denen ich Probleme habe.


Besondere Probleme, die ich habe:

  • Ich habe eine AppleScript-Methode gefunden , um ein Laufwerk zu mounten, wenn es noch nicht gemountet ist - überprüfen Sie es name of every diskdann mount volume "path://to/volume"-, aber es erlaubt mir nicht, den Namen anzugeben, und ich bin vorsichtig, wie konsistent der Mac einen Pfad auf a automatisch benennt freigegebenes Nicht-Mac-Laufwerk. Ich möchte den Volume-Namen festlegen, damit ich darauf verweisen kann, wenn ich Spotlight mitteile, welches Volume indiziert werden soll, was in AppleScript unmöglich zu sein scheint?
  • Ich habe einen Shell-Skript-Weg gefunden, um ein Laufwerk auf einem bestimmten Volume zu mounten , aber ich habe gelesen (kann die Quelle jetzt nicht finden, suche danach), dass das Volume bereits vorhanden sein muss, was mich verwirrt (muss ich das tun). ein leeres Volume erstellen? Ich verstehe nicht ganz, was ein leeres Volume wäre); und ich kann nicht sehen, wie ich überprüfen kann, ob es nicht bereits automatisch gemountet wurde.

Mein Wissensstand über Mac-Volumes usw. ist ziemlich gering, daher bin ich mir bewusst, dass ich einige der oben genannten Punkte möglicherweise missverstanden habe.

Ich sehe jetzt einige Beispiele von AppleScript, die mountanscheinend verwendet werden & nameVar, um den Namen festzulegen, aber dies scheint dem zu widersprechen, was ich an anderer Stelle gelesen habe - zB hints.macworld.com/article.php?story=20120211184732735

Antworten (3)

OS X befolgt beim Mounten eines Laufwerks die folgenden Schritte: Es erstellt ein Raw-Gerät in /dev/ (nur für lokale Festplatten), es erstellt einen Ordner in /Volumes/ und mountet dann das Laufwerk in dem gerade erstellten Ordner. Dieser Ordnererstellungsschritt ist wahrscheinlich das, was Sie gelesen haben. Dem von Ihnen verlinkten Shell-Skript fehlt der folgende Befehl:

mkdir /Volumes/somenetworkdir

Dann funktioniert der von Ihnen verlinkte Befehl mit den richtigen Parametern

mount -t smbfs -o username=RemoteUser //REMOTEHOST/directory /Volumes/somenetworkdir
Kann ich also überprüfen, ob das Volume bereits vorhanden ist, indem ich überprüfe, ob das Verzeichnis bereits in Volumes vorhanden ist? Darauf vertrauen, dass es entfernt wird, wenn es nicht gemountet ist? Oder ist es nicht so einfach?
OS X entfernt das Verzeichnis, wenn es das Laufwerk unmountet, ja. Der einzige Fall, in dem dies möglicherweise nicht der Fall ist, ist, wenn das System nicht ordnungsgemäß heruntergefahren wird, wodurch verhindert wird, dass das Verzeichnis wie gewohnt entfernt wird.
Sie können versuchen, zuerst "rmdir /Volumes/somenetworkdir" auszuführen, wenn Sie sicher sein wollen, dass das Verzeichnis nicht vorhanden ist, wenn das Skript ausgeführt wird, obwohl Sie es zuerst überprüfen, damit es nicht fehlschlägt! Oder überprüfen Sie einfach die Existenz des Verzeichnisses, bevor Sie mkdir ausführen. Das ist wahrscheinlich ideal.
set mountedVolumes to do shell script "ls /Volumes/"

if (mountedVolumes contains "thisDriveName") is false then

        mount volume "afp://thisUsername:thisPassword@thisIPorHostname/thisDriveName"

end if

Sie können überprüfen, ob ein Volume gemountet ist, indem Sie die Ausgabe des mountBefehls überprüfen:

mount | grep '/Volumes/SomeVolumeName'

Und Sie können es mit mounten open smb://.... Ihr Skript könnte also etwa so aussehen

#!/bin/bash

server=my_server
share=SomeShare
user=my_username
pass=y_password

# ...

mount | grep -q "/Volumes/$share " || open smb://$user:$pass@$server/$share

# ...

Der open smb://...Befehl wird es unter dem Namen der Freigabe bereitstellen.