NOMBRE_FICHERO=$(basename -- "$RUTA_COMPLETA")
EXTENSION="${NOMBRE_FICHERO##*.}"
NOMBRE_FICHERO="${NOMBRE_FICHERO%.*}"
Para más información sobre la expansión de parámetros en el siguiente enlace podremos encontrarla: http://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html
IT.FLOSS
Extraer nombre de fichero y extensión en bash
De cuando en cuando necesito extraer el únicamente el nombre del fichero y/o su extensión. Para ello en bash podemos hacer los siguiente (vía Stack Overflow):
Captura de pantalla en el portapapeles
Si por la razón que sea no se tiene acceso a ninguna herramienta gráfica de captura de pantalla o no queremos utilizar una, podemos utilizar scrot para realizarlas.
Pero scrot sólo envía dichas capturas a un fichero. Pero ¿y si queremos tener esa captura en el portapapeles para poder pegarla en una aplicación que soporte el pegado de imágenes? Ahí es donde entra xclip.
El programa xclip no viene por defecto (al menos no en Arch Linux). Para instalarlo, es tan simple como:
Una vez instalado podemos colocar texto o imágenes en el portapapeles de la siguiente manera:
Pero scrot sólo envía dichas capturas a un fichero. Pero ¿y si queremos tener esa captura en el portapapeles para poder pegarla en una aplicación que soporte el pegado de imágenes? Ahí es donde entra xclip.
El programa xclip no viene por defecto (al menos no en Arch Linux). Para instalarlo, es tan simple como:
$ sudo pacman -S xclip resolviendo dependencias... buscando conflictos entre paquetes... Paquetes (1) xclip-0.13-2 Tamaño total de la instalación: 0,06 MiB :: ¿Continuar con la instalación? [S/n] S (1/1) comprobando las claves del depósito [##############################] 100% (1/1) verificando la integridad de los paquetes [##############################] 100% (1/1) cargando los archivos de los paquetes [##############################] 100% (1/1) comprobando conflictos entre archivos [##############################] 100% (1/1) comprobando el espacio disponible en el disco [##############################] 100% :: Procesando los cambios de los paquetes... (1/1) instalando xclip [##############################] 100% :: Ejecutando los «hooks» de posinstalación... (1/1) Arming ConditionNeedsUpdate...
Una vez instalado podemos colocar texto o imágenes en el portapapeles de la siguiente manera:
$ echo '¡Hola mundo!' | xclip -iPara pegar el texto almacenado en el portapapeles con la orden anterior debemos pulsar el botón central del ratón. Si quisiéramos que estuviera disponible mediante [CTRL]+v sólo necesitaríamos añadir el parámetro -selection:
$ echo '¡Hola mundo!' | xclip -i -selection clipEn lugar de xclip lea de la entrada estándar podemos pasarle un fichero como parámetro y sería el contenido de dicho fichero el que se almacenaría en el portapapeles:
$ xclip /etc/issueNo sólo podemos poner texto en el portapapeles mediante xclip. También podemos colocar imágenes, para ello debemos decirle el formato de los datos que contiene el fichero que le pasamos.
$ xclip -selection clip -t image/png fichero.pngCon la orden anterior, pondríamos el contenido de fichero.png en el portapapeles (accesible mediante [CTRL]+v) e indicamos que se trata de una imagen en formato PNG.
Vim. Plantillas para cabeceras que se incluyen automáticamente.
Recientemente he visto un artículo donde explica como configurar vim para que incluya un texto al comienzo de un fichero nuevo. Pienso que es bastante útil. Por ejemplo se puede hacer que incluya el texto de la licencia GPL3.
Lo primero creamos un fichero de texto con lo que queremos que se incluya. Por ejemplo el texto para indicar que el fichero de texto es software libre bajo la licencia GPL3 en ficheros C/C++
Lo primero creamos un fichero de texto con lo que queremos que se incluya. Por ejemplo el texto para indicar que el fichero de texto es software libre bajo la licencia GPL3 en ficheros C/C++
/* This file is part of <foobar>. <foobar> is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. <foobar> is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with <foobar>. If not, see <https://www.gnu.org/licenses/>. */Luego editamos el fichero .vimrc en nuestro $HOME y añadimos lo siguiente:
au bufnewfile *.{c,h,cpp,hpp,cc} 0r /home/la/.vim/doc/cabecera_licencia_gpl3_C_multiple.txt
Deberemos, eso sí, sustituir manualmente <foobar> por el nombre de nuestro programa.
Una de tamaños
- Tamaño de las bases de datos
SELECT table_schema "Data Base Name", sum( data_length + index_length ) / 1024 / 1024 "Data Base Size in MB", sum( data_free )/ 1024 / 1024 "Free Space in MB" FROM information_schema.TABLES GROUP BY table_schema;
- Tamaño de las tablas de una base de datos
select
table_name,
table_rows "# Filas",
data_length "Tamaño datos",
index_length "Tamaño índices",
round(((data_length + index_length) / 1024 / 1024),2) "Ocupado en MB",
round((data_free / 1024 / 1024),2) "Libre en MB",
round((data_free / (data_length + index_length)),6) "Fragmentación"
from information_schema.tables
where table_schema = "miBaseDeDatos"
order by (data_length + index_length)
desc;
CMake. Soporte para MySQL/MariaDB y PostgreSQL en C.
Para añadir soporte para MySQL/MariaDB o PostgreSQL en C utilizando CMake podemos partir del siguiente CMakeLists.txt
cmake_minimum_required(VERSION 3.5)
project(CPasos C)
set(CMAKE_C_FLAGS_DEBUG "-D_ZZSoft_DEBUG_ -Wall")
include(FindPkgConfig)
pkg_check_modules(LIBMYSQLCLIENT REQUIRED mysqlclient)
foreach(FLAG ${LIBMYSQLCLIENT_CFLAGS_OTHER})
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${FLAG}")
endforeach()
pkg_check_modules(LIBPOSTGRESQL REQUIRED libpq)
set (HEADER_FILES variables.h)
set (SOURCES main.c ${HEADER_FILES})
set (THREADS_PREFER_PTHREAD_FLAG ON)
find_package(Threads REQUIRED)
link_directories(${LIBMYSQLCLIENT_LIBRARY_DIRS} ${LIBPOSTGRESQL})
add_executable(${PROJECT_NAME} ${SOURCES})
target_include_directories(${PROJECT_NAME} PRIVATE ${LIBMYSQLCLIENT_INCLUDE_DIRS} ${LIBPOSTGRESQL_INCLUDE_DIRS})
target_link_libraries (${PROJECT_NAME} PRIVATE ${CMAKE_THREAD_LIBS_INIT} ${LIBMYSQLCLIENT_LIBRARIES} ${LIBPOSTGRESQL_LIBRARIES})
Normalmente para añadir el soporte para alguna librería utilizando cmake se utiliza la función find_package que busca dentro de los directorios configurados ficheros con extensión cmake. Las pruebas las hice sobre Ubuntu, y en esta distribución, para el soporte PostgreSQL no me funcionó esta función. Para el soporte MySQL/MariaDB partí de https://mysqlserverteam.com/the-client-library-part-4-how-to-write-a-simple-mysql-client-in-c-using-cmake-and-pkg-config/
Previsión meteorológica desde la línea de órdenes
Personalmente utilizo la línea de órdenes prácticamente para todo lo que hago con el ordenador (aunque tenga instalado entorno gráfico) así que poder conocer la previsión meteorológica desde la línea de órdenes es algo que me resulta bastante práctico. Por ello, gracias a @igor_chubin, consultando mediante curl la web wttr.in/ciudad podemos conocer la previsión para la "ciudad" que indiquemos en la URL.
Una nota para finalizar. El código fuente de esta aplicación creada por @igor_chubin está disponible en su GitHub.
curl wttr.in/ZanzabornínComo se puede ver, están permitidos caracteres UTF-8. Al ejecutar la línea anterior, veremos algo como lo siguiente:
Una nota para finalizar. El código fuente de esta aplicación creada por @igor_chubin está disponible en su GitHub.
Conocer IP pública desde la línea de órdenes
En ocasiones suele necesitarse conocer la IP pública de una máquina y si no disponemos de entorno gráfico para poder acceder a alguna de las webs que te la muestran (o si como a mi os resulta más cómoda la línea de órdenes), podemos ejecutar la siguiente línea que sólo necesita de curl:
Si preferimos utilizar wget, o es la orden que tenemos instalada en nuestra máquina, podemos ejecutar:
curl ipinfo.io/ip
Si preferimos utilizar wget, o es la orden que tenemos instalada en nuestra máquina, podemos ejecutar:
wget -qO- ipinfo.io/ip
Suscribirse a:
Comentarios (Atom)
