Mostrando las entradas con la etiqueta bash. Mostrar todas las entradas
Mostrando las entradas con la etiqueta bash. Mostrar todas las entradas

martes, 11 de octubre de 2016

¿Por qué uso ZSH y no Bash?


Bash (Bourne again shell) es un intérprete de órdenes para nuestro sistema con base Linux, además de un lenguaje de programación, que es con lo que interactuamos cada vez que abrimos un terminal en Linux. No importa la distribución de Linux que uses, estoy convencido de que por defecto viene con Bash o derivadas de ella.

El problema es, que si bien usando bash-completion hacemos que Bash obtenga una serie de funciones que no vienen activadas por defecto, como el autocompletado de comandos, hay otras alternativas para nuestro terminal que nos permiten trabajar de forma más productiva y más rápido.

ZSH

La historia de Z Shell (a.k.a Zsh http://www.zsh.org) la pueden encontrar en Internet. Yo lo que voy a mostrar son algunas de las cualidades que tiene que lo hacen una excelente opción y los motivos por el cual yo lo uso. Además, para aumentar aún más sus posibilidades y mejorar su apariencia, podemos hacer uso de Oh My Zsh http://ohmyz.sh, lo cual podemos instalar fácilmente siguiendo las instrucciones de sus sitio web.

Primero el Autocompletado de directorios con cd

Cuando usamos el comando cd para trabajar con directorio, ZSH es capaz de mostrar cuales son los posibles directorio y subdirectorios a los que podemos acceder al escribir el comando y pulsar la tecla.


Pero eso no es tan útil como la siguiente opción del comando cd.

Segundo Autocompletado de nombre de rutas

Yo lo llamo Autocompletado de nombre de rutas, y lo que hace es que, poniendo por ejemplo /des/carp/m/ al presionar la tecla Tab, Zsh nos auto-completa la ruta Descargas/carpComp/M&S/


Pero la cosa no termina aquí. Ahora les muestro la funcionalidad que más uso posiblemente con ZSH y es la siguiente. Como sabemos, cuando ejecutamos varios comandos en Bash, estos se van guardando en un historial. Si queremos volver a repetir el comando anterior, simplemente con la flecha de arriba lo volvemos a mostrar ¿cierto?

Pues con ZSH es lo mismo, pero, tiene otra característica. Si antes de darle a la flecha de arriba, escribimos un comando, por ejemplo cd,  en vez de mostrar todos los comandos anteriores en el historial, nos mostrará, todo los comandos anteriores que ejecutamos solo que comienzan con cd.



De todos modos, la mejor forma de entender lo que digo es usar ZSH, así que sólo tienen que instalarlo.

Para derivados de Fedora:

Para derivados de Arch:

Hay muchísimas otras cosas que podemos hacer con este intérprete de órdenes, pero ya queda por ustedes hacer la tarea.

Y si a eso le agregan que pueden tener una terminal como ésta, es perfecto.




viernes, 29 de mayo de 2015

Convertir todos los vídeos FLV a MP3 de un directorio

Un día quería pasar unos vídeos FLV a fotrmato MP3, dichos vídeos los había descargado de YouTube. Bueno, busqué rápidamente programas que hicieran esa conversión usando Linux, resulta que no encontré ningún programa que conviertiera todos los vídeos uno tras otro contenidos en una carpeta.

De tal manera que, decidí crear mi script, para solucionar este problema. Cuando usamos Linux, sabemos que la consola siempre es una opción para terminar lo que empezamos, siempre y cuando no sea para ver vídeos.

Bueno, el script que creé es el siguiente, ojo, no olviden que se necesita tener instalado ffmpeg para que el script funcione:
#!/bin/bash
# convertir .flv a .mp3 recursivamente
# LiNuXiToS- Fernando Merino
# carpeta =  ruta de la carpeta que contiene los archivos a convertir
# archivo = variale para obtener los nombres de los archivos
# noantarch = variable que contiene el nombre anterior del archivo
# nonuearch = variable con el nuevo nombre del archivo

if [ -z $1 ];then echo Ingrese directorio destino; exit 0;fi
find "$1" -depth -name '*' | while read archivo ; do
carpeta=$(dirname "$archivo")
noantarch=$(basename "$archivo")
nonuearch=$(basename "${archivo%.[Ff][Ll][Vv]}")
if [ "$noantarch" != "$nonuearch" ]; then
ffmpeg -i "$carpeta/$noantarch" -ab 320k "$carpeta/$nonuearch.mp3" </dev/null
#rm "$carpeta/$noantarch"
fi
done


Copiar y pegar el texto en un archivo de videoAmp3.sh aplicar permisos de ejecución como se muestra:
chmod +x videoAmp3.sh
Ejecución: ir al directorio en el que está el archivo videoAmp3.sh
./videoAmp3.sh /ruta-de-la-carpeta-contenedora-de-los-videos
ejemplo:
./videoAmp3.sh ~/Vídeos/videoclips

Ventajas del script:
  1. Conversión rápida ya que no necesita interfaz gráfica
  2. Compatibilidad con distros Linux
  3. Funciona con archivos soportados por ffmpeg
  4. Funciona con archivo con nombres con espacios
 Desventajas:
  1. Si en la carpeta hay varios tipos de videos, por ejemplo, mp4, avi, flv, wma, ect., es necesario modificar la instrucción que dice nonuearch=$(basename "${archivo%.[Ff][Ll][Vv]}") en la parte de [Ff][Ll][Vv] es para la extensión del archivo original, es decir, uniendo esas tres letras se encuentran las combinaciones posibles de por ejemplo del formato .flv, si fuera para mp4, entonces quedaría [Mm][Pp][4] y así sucesivamente.
  2. Necesario modificar al tipo de archivo al que se obtendrá de salida, es más que obvio esta instrucción. En la línea ffmpeg -i "$carpeta/$noantarch" -ab 320k "$carpeta/$nonuearch.mp3" </dev/null es necesario indicar el tipo de archivo de salida, por ejemplo a wma.
 Para saber los tipos de formatos compatibles con ffmpeg usar la consola el siguiente coando:
ffmpeg -formats
Y les desplegará la lista con los formatos compatibles. Y eso es todo.

http://stackoverflow.com/questions/10083498/bash-script-to-convert-all-flv-file-in-a-directory-to-mp3
http://stackoverflow.com/questions/19562785/handbrakecli-bash-script-convert-all-videos-in-a-folder
http://stackoverflow.com/questions/10083498/bash-script-to-convert-all-flv-file-in-a-directory-to-mp3#21363118

jueves, 30 de octubre de 2014

Script para espiar el contenido de dispositivos USB y copiarlo a la PC


Hace poco quería un escritp en bash que me indicara cuando la carga de la bateria de mi laptop estuviera llena, no tuve mucha suerte con la búsqueda, sin embargo encontré un escritp en bash que realiza las siguientes  funciones:
  1. Detectar cuando se conecta un dispositivo USB a la computadora
  2. Copiar todo el contenido de ese dispositivo hacia la computadora
Básicamente con esas funciones podemos hacer un sin fin de cosas:
Descripción de los archivos y lo que hace:
1. Crear la carpeta /home/.USBDRIVES/
2. Comprobar cada 5 segundos si hay algún dispositivo USB (o CD/DVD) conectado al ordenador.
3. En caso de que esté alguno conectado, creará una carpeta dentro de /home/.USBDRIVES/ con el nombre del USB (por ejemplo: memoria-2gb) y además, copiará todos los archivos .doc, .pdf, etc., hacia esta carpeta que recién acaba de crear.
4. En caso de que no haya ningún USB conectado, simplemente esperará 5 para volver a verificar.
El script en bash y los archivos que son copiados lo pueden descargar desde aquí
El script debe ser ejecutado de preferencia como root para que su funcionamiento no se vea limitado o bien con un usuario que sea sudo.
Para que el script pueda funcionar sin ningún tipo de problemas, lo mejor es que sea iniciado con privilegios administrativos (root), así como es obvio que se necesita que se inicie junto al ordenador, de esta forma nos aseguramos que si el ordenador es reiniciado o apagado, cuando vuelva a iniciar el script estará ahí funcionando, listo para extraer de cualquier USB lo que deseamos ;)
1. Supongamos que tenemos ambos archivos en /opt/ (/opt/usb-spy.sh y /opt/usb-spy.files), debemos darle privilegios de ejecución:
sudo chmod +x /opt/usb-spy.sh
2. Abrimos el archivo /etc/rc.local :
sudo nano /etc/rc.local
3. En él escribimos arriba de la línea final (exit 0) lo siguiente:
/opt/usb-spy.sh &
4. Ahora presionamos [Ctrl]+[X] para guardar y salir del archivo, presionamos [S] o [Y] (en dependencia del idioma del sistema) y luego [Enter]. Esto bastará para que se guarden los cambios que hicimos.
Y listo, esto bastará para que el script se inicie como root cuando encendamos el ordenador.
Es importante verificar que el archivo usb-spy.files esté en el mismo directorio de usb-spy.sh