Montaje de unidades de red SMB en Mac OS
SMB es el protocolo de Microsoft DOS y Windows para el montaje y compartición de unidades de red.
Normalmente en Mac OS el montaje de estas unidades es muy sencillo, ya que en la parte izquierda de cualquier ventana de Finder aparece un apartado llamado “COMPARTIDO” y haciendo click sobre un PC, aparece la lista de unidades compartidas. El montaje es “casi siempre” automático.
Pero puede ocurrir que esto no funcione, ya que a veces no aparece en esa lista ningún ordenador, o no aparecen todos.
Otras veces no te deja conectarte aunque apareza, incluso aunque pongas las credenciales correctas… no es un sistema infalible.
Admitámoslo: Mac OS dista mucho de ser perfecto y a veces la extrema sencillez de su interfaz desespera.
Cuando no puedes conectarte a la máquina deseada y sabes (1) que dicha máquina existe en la red, (2) que tienes conectividad con ella -que puedes hacer ping y te responde-, entonces es el momento de abrir el terminal y hacer las cosas como es debido: sabiendo lo que de verdad se hace.
Supongamos que nos queremos conectar a la máquina NEO, como es lógico, a veces tampoco funciona la resolución de nombres, por lo cual echamos mano de su dirección IP, por ejemplo 192.168.1.5. El recurso compartido de red es por ejemplo shared. En la sintáxis de Windows esto sería \\NEO\shared. En NEO tenemos el usuario foo cuya clave es 131313.El siguiente script monta la unidad compartida en nuestro Mac en el directorio /Volumes (que es el estándar, en linux se suele usar el directorio /media):
#!/bin/bash
mkdir /Volumes/shared
mount_smbfs //foo:131313@NEO:139/shared /Volumes/shared
rmdir /Volumes/shared
Es importante crear y borrar el directorio, ya que de esta manera, cuando desmontemos el volumen, automáticamente borrará el directorio donde se ha montado.
Como vemos, la sintáxis de mount_smbfs es:
mount_smbfs //usuario:contraseña@máquina:139/recurso punto_de_montaje
Si con el nombre de NEO no es capaz de localizarlo, entonces echamos mano de su dirección IP:
mount_smbfs //foo:131313@192.168.1.5:139/shared /Volumes/shared
El valor 139 es el número de puerto asignado en Windows para transferencias NETBIOS.
Para desmontar el volumen, podemos usar el imperfecto Finder o abrir el terminal y escribir:
umount /Volumes/shared
Las pruebas han sido realizadas con Mac OS 10.5.7 con kernel 9.7.0 y con Windows Server 2003 R2 SP2.
Script para visualizar el árbol de directorios
En los tiempos del MS-DOS, existía un comando llamado TREE que mostraba de manera textual la estructura de directorios. Ésta utilidad la he hechado mucho de menos en otros sistemas como UNIX.
Podemos solucionarlo con un simple bash script que se llama a sí mismo, es un código muy sencillo y no contempla todos los casos posibles… pero es un primer acercamiento. La utilidad la he llamado dirtree.
#!/bin/bash
if [ "$1" ]; then
path=$1
else
path="."
fi
tab="| "
echo "$2$(basename "$path")"
cd "$path"
find . -name "??*" -type d -maxdepth 1 -exec dirtree {} "$tab$2" \;
if [ "$(find . -name "??*" -type d -maxdepth 1)" ]; then
echo "$tab$2"
fi
Ampliación de los scripts de compresión
Hace unos días mostré el código para comprimir en formato .tar.gz y .tar.bz2.
Ahora lo he ampliado para que comprima en formato .tar.7z. El formato 7zip es un revolucionario sistema de compresión con altas tasas de compresión y es además multithreading.
El código del script ahora requiere de 4 ejecutables en el path: tar, gzip, bzip2 y 7za.
Script comprime:
#!/bin/bash if [ "$2" = "gzip" ]; then echo "Se ha elegido gzip como compresor." compresor="z" extension="gz" else if [ "$2" = "bzip" ]; then echo "Se ha elegido bzip2 como compresor." compresor="j" extension="bz2" else if [ "$2" = "" ]; then compresor="z" extension="gz" else if [ "$2" = "7zip" ]; then compresor="7" extension="7z" else echo "Error: El parámetro debe ser gzip, bzip o 7zip" exit 1 fi fi fi fi if [ $1 ] ; then FICHERO=$(basename $1) if [ "$compresor" = "7" ]; then tar -cvf - . | 7za a -si ~/$FICHERO.tar.$extension else tar cvf$compresor ~/$FICHERO.tar.$extension . fi echo echo Fichero ~/$FICHERO.tar.$extension creado. exit 0 fi echo echo Script para comprimir ficheros y directorios, uso: echo echo $(basename $0) NOMBRE \[FORMATO\] echo echo \(Donde NOMBRE indica el nombre del fichero que se va a generar tras comprimir echo el directorio actual y FORMATO el compresor a usar\) echo echo Nota: Si no se indica FORMATO, se utilizará gzip. echo Formatos aceptados: gzip, bzip y 7zip echo exit 1
Script descomprime:
#!/bin/bash if [ "$1" != "" ]; then if [ -f "$1" ] ; then DIRECTORIO=$(basename $(basename "$1" .tgz) .tar.gz) DIRECTORIO=$(basename $(basename "$DIRECTORIO" .tbz2) .tar.bz2) DIRECTORIO=$(basename $(basename "$DIRECTORIO" .t7z) .tar.7z) EXTCHK=$(basename $(basename "$1" .t7z) .tar.7z) if [ "$EXTCHK" = "$DIRECTORIO" ]; then EXTENSION="7z" else EXTENSION="(none)" fi if [ -d "$DIRECTORIO" ] ; then echo echo Error: No se puede descomprimir, existe el directorio ./$DIRECTORIO exit 1 else mkdir "$DIRECTORIO" if [ "$EXTENSION" = "7z" ]; then 7za e -so "$1" | tar -xvC "$DIRECTORIO" else tar -xvC "$DIRECTORIO" -f "$1" fi echo echo Fichero $1 descomprimido. exit 0 fi fi fi echo echo Script para descomprimir ficheros y directorios en formato .tgz \(.tar.gz\), echo .tbz2 \(.tar.bz2\) o .t7z \(.tar.7z\), uso: echo echo $(basename $0) FICHERO echo echo \(Donde FICHERO indica el nombre del fichero comprimido\) echo echo Nota: se descomprime a un directorio el cual no debe existir. echo exit 1
Scripts para compresión y descompresión
Aunque esto se puede ya hacer de una manera muy fácil gracias a las interfaces gráficas y programas de compresión en modo gráfico, hay momentos en los que necesitamos de un simple script que comprima la carpeta actual o descomprima un fichero en formato .tar.gz, .tbz, .tar.bz o .tbz. Esas veces que estás en modo texto programando y quieres empaquetar todo el código fuente en un simple fichero.
Estos scripts tienen ya muchos años de antigüedad, pero al recordar que aún no lo tenía instalado en mi portátil, he decidido mostrarlo por si a alguien le sirve.
El compresor:
El compresor dado un nombre de fichero comprime el directorio actual y lo almacena en el directorio home del usuario. Si además le indicamos gz o bzip lo comprime en el formato indicado.
Por ejemplo: $ comprime fichero bzip que crea el fichero ~/fichero.tar.bz el cual contiene todos los ficheros del directorio en el cual se lanzó el compresor. El código es:
#!/bin/bash if [ "$2" = "gzip" ]; then echo "Se ha elegido gzip como compresor." compresor="z" extension="gz" else if [ "$2" = "bzip" ]; then echo "Se ha elegido bzip2 como compresor." compresor="j" extension="bz2" else if [ "$2" = "" ]; then compresor="z" extension="gz" else echo "Error: El parámetro debe ser gzip o bzip" exit 1 fi fi fi if [ $1 ] ; then FICHERO=$(basename $1) tar cvf$compresor ~/$FICHERO.tar.$extension . echo echo Fichero ~/$FICHERO.tar.$extension creado. exit 0 fi echo echo Script para comprimir ficheros y directorios, uso: echo echo $(basename $0) NOMBRE \[FORMATO\] echo echo \(Donde NOMBRE indica el nombre del fichero que se va a generar tras comprimir el directorio actual y FORMATO el compresor a usar\) echo echo Nota: Si no se indica FORMATO, se utilizará gzip echo exit 1
El descompresor:
Descomprime el fichero dentro de un directorio que no debe existir previamente, para evitar sobreescribir su contenido por accidente. Por ejemplo: $ descomprime paquete.tar.gz que genera el directorio paquete que cuelga del directorio actual y descomprime en él el contenido del fichero paquete.tar.gz.
#!/bin/bash if [ "$1" != "" ]; then if [ -f "$1" ] ; then DIRECTORIO=$(basename $(basename "$1" .tgz) .tar.gz) DIRECTORIO=$(basename $(basename "$DIRECTORIO" .tbz2) .tar.bz2) if [ -d "$DIRECTORIO" ] ; then echo echo Error: No se puede descomprimir, existe el directorio ./$DIRECTORIO exit 1 else mkdir "$DIRECTORIO" tar -xvC "$DIRECTORIO" -f "$1" echo echo Fichero $1 descomprimido. exit 0 fi fi fi echo echo Script para descomprimir ficheros y directorios en formato .tgz (.tar.gz) o .tbz2 (.tar.bz2), uso: echo echo $(basename $0) FICHERO echo echo \(Donde FICHERO indica el nombre del fichero comprimido\) echo echo Nota: se descomprime a un directorio. echo exit 1
Los scripts estan probados y funcionan en Linux, Solaris y MacOS, pero requieren que esté en el PATH tanto la utilidad tar como gzip y bzip2. Estos scripts son de uso libre, además las críticas positivas o posibles mejoras siempre son bien recibidas.
Y basándose en el compresor, puede que nos venga bien este script que comprime el directorio actual sin tener que especificar nada y añade la fecha al nombre del fichero, la utilidad se llama backup. Muy útil para guardar un historial del contenido de un proyecto.
#!/bin/bash nombre=$(date +%Y-%m-%d.%H-%M).$(basename $(pwd)) comprime \"$nombre\" bzip
Script para conversión de ficheros WAV a MP3
Hay infinidad de programas que te convierten de WAV a MP3, pero en el mundo UNIX no he encontrado uno que me deje configurar los parámetros de calidad como a mí me gustan, ni que aproveche los ‘cores’ del procesador. En Windows solía usar Razorlame, un ‘front-end’ muy básico pero a la vez muy potente. En Mac OS aún no lo he encontrado, así que he tenido que programarme un pequeño script que cualquiera puede usar. Las críticas contructivas son bien recibidas
Este script funciona en cualquier sistema UNIX que tenga BASH y el binario lame. Lame es el software que se encarga de codificar un fichero de audio WAV a MP3. El script que presentamos a continuación tiene 2 formas de invocarse en el terminal:
- Sin parámetros:
wav2mp3, que codifica todos los ficheros WAV del directorio actual a MP3. Lanza un proceso independiente por cada fichero, por tanto pone el procesador a máximo rendimiento. - Con 1 parámetro:
wav2mp3 fichero_wav, que codifica dicho fichero WAV.
La calidad de MP3 que a mí me gusta es la siguiente: Variable bit rate, mínima 192Kbps, media 264Kbps y máxima 320Kbps. El código fuente del script es:
#!/bin/bash
##
## wav2mp3, convert a wav file in a mp3.
##
if [ "$1" == "" ]; then
echo Convert all in this directory
find . -maxdepth 1 -name "*.wav" -exec wav2mp3 {} \;
exit
fi
# Define useful variables
dirname=$(dirname "$1")
inputfile=$(basename "$1")
filename=$(basename "$1" .wav)
filename=$(basename "$filename" .WAV)
# If file is located in root dir, then supress "/"
if [ "$dirname" == "/" ]; then
dirname=""
fi
# Convert the file
if [ "$dirname" == "." ]; then
echo "Converting file \"$filename\" from WAVE to MPEG layer 3..."
echo "--------------------"
lame -S -b 192 -m s -h --abr 264 -B 320 "$inputfile" "$filename.mp3" &
else
echo "Converting file \"$dirname/$filename\" from WAVE to MPEG layer 3..."
echo "--------------------"
lame -S -b 192 -m s -h --abr 264 -B 320 "$dirname/$inputfile" "$dirname/$filename.mp3" &
fi
echo
echo Task launched!
-
Recientes
- La frase
- Muere Michael Jackson
- Nuevo intento de timo
- Montaje de unidades de red SMB en Mac OS
- Mas terco que un teólogo de Albacete
- Otra cagada mas del desgobierno de Zapatero
- Muere la enciclopedia Microsoft Encarta
- La frase
- La tremenda y dañina imposición moral de la iglesia en un centro educativo público
- Microsoft y su navegador sigue haciendo aguas
- He pasado el test de los adolescentes
- El “presidente” Hugo Chávez haciendo de las suyas
-
Enlaces
-
Archivos
- Septiembre de 2009 (1)
- Junio de 2009 (3)
- Abril de 2009 (3)
- Marzo de 2009 (9)
- Febrero de 2009 (15)
- Enero de 2009 (11)
- Noviembre de 2008 (1)
- Junio de 2008 (1)
- Mayo de 2008 (2)
- Abril de 2008 (4)
- Marzo de 2008 (8)
- Febrero de 2008 (7)
-
Categorías
- A la española
- Análisis
- Cultura
- Curiosidades
- Efemérides
- Entretenimiento
- Frases célebres
- Frases patéticas
- Historia
- in-kultura
- Informática e Internet
- Investigación
- Libre pensamiento
- Música
- Noticias
- Noticias académicas
- Noticias y política
- Pasatiempos
- Personal
- programación
- Reflexiones
- Script bash
- Sin categoría
- Telefonía
- Uncategorized
- Viajes
-
RSS
Subscripciones RSS
RSS de los Comentarios