Jak mogę skopiować pełny link smb: // z pliku w Finderze?

3

Pracuję w środowisku Windows z wieloma różnymi współdzielonymi dyskami. Zazwyczaj okna Findera są otwarte na różne udostępnione dyski i zagnieżdżone foldery. Mam skonfigurowaną usługę (którą utworzyłem w Automatorze), która pozwala mi klikać z wciśniętym klawiszem Control i „kopiować pełną ścieżkę” pliku lub folderu, który wybrałem w Finderze.

To, co otrzymuję, wygląda mniej więcej tak:

/Volumes/someFolder/someFile.docx

Jeśli jednak wybiorę ten element w Finderze i wykonam polecenie-i, zobaczę pełną smb://ścieżkę, która zawiera również nazwę serwera. Chciałbym to skopiować, aby wyglądało to tak:

smb://Server/someParentFolder/someFolder/someFile.docx

Jak mogę utworzyć usługę w Automatorze, która skopiuje całą smb://ścieżkę sieciową do wybranego pliku zamiast tej, która zgłasza się jako pełna ścieżka?

Jeśli Automator nie skopiuje smb://ścieżki sieciowej, czy istnieje inny sposób, aby utworzyć narzędzie, które to zrobi?

Glina
źródło
@anthonyg To nie jest duplikat. Nie próbuję tworzyć ścieżek udziału SMB w stylu Windows, które uruchamiają się poprawnie. Chcę ścieżkę udostępniania SMB w stylu OS X. Uważam jednak, że ten drugi post jest przydatny w innym wydaniu.
Clay
W WinShortcutter dostępna jest opcja kopiowania ścieżki w stylu Windows lub OS X (ukośniki do przodu lub do tyłu) - nie jestem pewien, czy to zrobi, co chcesz.
nthonygreen
Widziałem to, dzięki. Nie tego szukam, ponieważ nie zawiera pełnej ścieżki z nazwą serwera, tak jak smb://link.
Clay
Aha. TotalFinder ( totalfinder.binaryage.com ) daje całkiem sporo możliwości kopiowania ścieżek (Windows, Posix, UNC, HFS, terminal, URL), ale nic nie widzę z nazwą serwera.
nthonygreen

Odpowiedzi:

2

Możesz kliknąć plik prawym przyciskiem myszy i wybrać „Uzyskaj informacje” - okno wyskakujące będzie miało właściwość, dla Serverktórej wyświetla pełną ścieżkę URL z protokołem (np. smb://example.com/Data/file.png)

Jeremy
źródło
nie działa dla mnie: nie ma właściwości dla serwera.
Początkujący
1

Dwa lata później jest to irytujący problem i nie znajdując dobrej odpowiedzi na podobne pytanie, zrobiłem usługę automatyzatora, która robi to w ramach pracy potrzebnej do stworzenia pliku .inetloc z Findera.

Zasadniczo wyszukuje punkt montowania bieżącego udziału za pomocą danych wyjściowych komendy mount i dopasowuje go do ścieżki „montowanej”, a następnie skleja je ze sobą, jak wspomniano powyżej Iacopo.

Oto, jak możesz zrobić, co chcesz:

Przekaż wybrany element wyszukiwarki do skryptu powłoki w automatorze (jako zmienną, a nie standardową) i użyj tego skryptu:

# Match the server address and share/subfolder to the mount point,
# using 'mount' command output:
FIRSTPART=$(mount | grep "$(echo $1 | cut -d '/' -f 1-3)" | sed 's/^.*@\(.*\) on.*$/\1/g')

# Glue on the rest of the path
SECONDPART=$(echo $1 | cut -d '/' -f 4-)
WHOLETHING=$FIRSTPART/$SECONDPART

# now we url encode it
# oneliner modified from http://stackoverflow.com/a/10797966
ENCODED=$(echo "$WHOLETHING" | curl -Gso /dev/null -w %{url_effective} --data-urlencode @- "" | cut -c 3- | rev | cut -c 4- | rev)
# and we need to change the %2Fs back into /s, and add the smb://

FINAL=smb://$(echo $ENCODED | sed 's/\%2F/\//g')

echo "$FINAL"

Następnie możesz użyć akcji „Kopiuj do schowka” po skrypcie. Powinien załatwić sprawę. Jeśli ktoś chce, aby usługa automatyzacji utworzyła odpowiedni plik .inetloc, można go znaleźć tutaj .

Yashka Oreza
źródło
Zmodyfikowałem to do użytku w naszym biurze. Dzięki za opublikowanie!
Parker Young,
0

Myślę, że można łatwo naprawić odrobinę jabłka i „sed”.

Nie wiem, jak wygląda twój oryginalny skrypt Apple, ale zakładam, że masz zmienną, która zawiera ścieżkę, /Volumes/someFolder/someFile.docxjak powiedziałeś, nazwijmy tę zmienną thePath. Wszystko, co musisz zrobić, to wziąć thePath, usunąć /Volumes/i dodaćsmb://Server/someParentFolder/

Ten kod to:

#the following line only removes /Volumes/someFolder, it could also add smb://ecc but it would look like a big mess, I think it's easier to add that prefix in a separate line of code
set relativePath to do shell script "echo \"" & thePath & "\" | sed 's/.*Volumes\/someFolder//'"

#now you add the smb prefix or whatever you want
set relativePath to "smb://Server/someParentFolder" & relativePath

wtedy wszystko jest ustawione, użyj relativePathzamiast tego wyjścia thePathi powinno to działać, przynajmniej mi się udało :)

Iacopo Boccalari
źródło