6 votos

Terminal (bash) - copiar archivos desde recursos compartidos de Windows (SMB) sin montar

En versiones anteriores de OSX, uno podía copiar archivos desde recursos compartidos SMB de esta manera:

smbclient //my-server/foo -U USER%PASS -I 127.0.0.1 -c "get my.file" 

Sin embargo, en las últimas versiones, sbmclient ha sido sustituido por smbutil que no tiene capacidad de copia. Por lo que sé, el único reemplazo es mount -t smbfs . No conozco ninguna forma de instalar smbclient en OSX ( Imprimir archivo desde el terminal vía smb ).

Sin embargo, el montaje es bastante molesto:

  1. Hay que crear una carpeta para el punto de montaje (¿y si ya existe?)
  2. Si la misma carpeta ya ha sido montada en una carpeta diferente, mount fallará (con un error bastante engañoso)
  3. No hay una forma "estructurada" de saber qué acciones están montadas dónde (que yo sepa), lo que significa que tendrás que grep / sed la salida de df para intentar solucionar los problemas anteriores

Básicamente sólo quiero copiar de forma fiable un archivo de un recurso compartido SMB en un bash script, y los problemas anteriores lo hacen más complicado de lo que debería ser (y ya lo era antes smbclient se ha eliminado).

6voto

mivk Puntos 206

No puede hacerlo sin montar primero la acción.

Para montarlo desde la línea de comandos, ya sea a través de Terminal o desde una sesión SSH, hay varios métodos con diferentes ventajas y desventajas.

Unas cuantas variables, para que sea más fácil copiar/pegar el resto :

user=my_username; pass=my_password; server=my_server; share=my_share

Método 1

Cree una carpeta temporal, monte en ella, luego desmonte y elimine la carpeta temporal.

Este es el único método que también funciona sin que un usuario esté conectado, como a través de una sesión SSH abierta justo después del arranque. Pero si un usuario está realmente conectado todavía hay un icono en el escritorio para acceder al recurso compartido a través del Finder.

dir=$(mktemp -d)
mount -t smbfs //$user:$pass@$server/$share $dir

# ls -l $dir
# ...

umount $dir && rmdir $dir

Método 2

Éste sólo funciona si el usuario está conectado. Pero tiene la ventaja de montarse en el estándar /Volumes/$share carpeta.

open "smb://$user:$pass@$server/$share"

# ls -l /Volumes/$share
# ...

diskutil unmount /Volumes/$share

Este método abre una ventana del Finder en la GUI, mostrando el recurso compartido montado.

Método 3

Al igual que el método 2, esto sólo funciona si un usuario está conectado, y también se monta en el estándar /Volumes/$share carpeta.

Sin embargo, a diferencia del método 2, no abre una ventana del Finder al recurso compartido montado. (Pero también crea el icono en el escritorio).

Necesita un entrecomillado engorroso si se usan variables, porque no se pueden usar comillas simples.

osascript -e "mount volume \"smb://$user:$pass@$server/$share\""

# ls -l  /Volumes/$share
# ...

diskutil unmount /Volumes/$share

0 votos

¿Y si vas en dirección contraria, es decir, copiando un archivo de un directorio local a un recurso compartido SMB? Tengo mi NAS compartido a través de SMB en mi red, y puedo acceder a los archivos sin problemas a través de la ventana del Explorador de archivos, pero cuando intento copiar un archivo A el recurso compartido SMB, obtengo este error: $ cp chat.db smb://NAS6ABA8C._smb._tcp.local/iPhone-SMS-backup/chat-DB-backup/ cp: directory smb://NAS6ABA8C._smb._tcp.local/iPhone-SMS-backup/chat-DB-backup does not exist ¿Todavía tengo que pasar por todo el smbfs ¿para poder simplemente copiar el archivo en la ubicación remota?

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X