Skip to content

Cli tools

CLI tools

Me pasé un rato a zsh pero es lo mesmo en el fondo. Lo más útil para mi es buscar en el historial con el inicio de un comando.

Scripts utiles

https://bbs.archlinux.org/viewtopic.php?pid=626487#p626487

Derivado de: https://stackoverflow.com/a/35889620/11524079

#!/bin/bash

#File: sitetree.md

tree=$(tree -tf --noreport -P "*.md" -I "doc" --charset ascii $1 |
       sed -e 's/| \+/  /g' -e 's/[|`]-\+/ -/g' -e 's:\(- \)\(\(.*/\)\([^/]\+\)\):\1[\4](\2):g' |
       cut -c2-)

printf "# Site tree\n${tree}" > sitetree.md

Basado en: https://superuser.com/questions/303559/replace-symbolic-links-with-files/303561

mkdir tmp
find . -maxdepth 1 -type l -print | xargs cp -t tmp/ && mv tmp/* ./
rmdir tmp

Copiar iconos

Copiar imagenes (iconos, ponele) preservando su estructura de directorios, o "parents":

find hicolor -name "*litexl.png" -exec cp --parents {} ~/Software/LiteXL/hicolor \;
# https://unix.stackexchange.com/a/19847/460609

Grabar ISO de windows

NO FUNCIONÓ

# Primero formatear el pendrive a ExFat, con tabla de particiones MS-DOS
sudo mkdir /mnt/iso
sudo mount -o loop Win10_21H2_EnglishInternational_x64.iso /mnt/iso
rsync -avh --progress /mnt/iso/* /media/nicomic/8pen/

Comprimir PDF

Poner lo siguiente en .bashrc o .zshrc:

# PDF compress
gs_comprimir_pdf() {
    local first_arg="$1" \
          second_arg="$2"

    # Usar gs
    gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/prepress -dNOPAUSE -dQUIET -dBATCH -sOutputFile="$1.comppressed.pdf" $1
}
alias pdf_comprimir="gs_comprimir_pdf"

Referencias:

OCR para Screenshots

Reconocer texto en capturas de pantalla, para cuando la gente con fiaca o pocas ideas te manda links larguísimos en una imagen.

Requiere:

  • ImageMagick
  • Spectacle
  • Tesseract

Crear un script con el siguiente código, y luego un alias en .bashrc o .zshrc para ejecutarlo:

#!/bin/bash

select tesseract_lang in spa eng; do break; done
#echo $tesseract_lang
printf "\n"

SCR_IMG=`mktemp`
trap "rm $SCR_IMG*" EXIT

# spectacle, append ".png" to the output
spectacle -r -b -n -d 2 -o $SCR_IMG.png

# imagemagick
mogrify -modulate 100,0 -resize 400% $SCR_IMG.png

# sudo pacman -S tesseract tesseract-data-eng tesseract-data-spa
tesseract $SCR_IMG.png $SCR_IMG &> /dev/null

cat $SCR_IMG.txt

exit

Robado de acá: https://askubuntu.com/questions/280475/how-can-instantaneously-extract-text-from-a-screen-area-using-ocr-tools

ffmpeg

Convertir audio

Convertir audio en .mp3 o .wav a OGG Vorbis:

#!/bin/bash

for i in *.wav; do ffmpeg -i "$i" -c:a libvorbis -qscale:a 1 "ogg/${i%.*}.ogg"; done

for i in *.mp3; do ffmpeg -i "$i" -c:a libvorbis -qscale:a 1 "ogg/${i%.*}.ogg"; done

Opciones:

  • -qscale:a – audio quality. Range is -1.0 to 10.0, where 10.0 is highest quality. Default is -q:a 3 with a target of ​112kbps. The formula 16×(q+4) is used below 4, 32×q is used below 8, and 64×(q-4) otherwise. Examples: 112=16×(3+4), 160=32×5, 200=32×6.25, 384=64×(10-4).

Esto, más o menos, baja el tamaño de un .mp3 al tercio, y 20 veces el de un .wav.

Combinar video y audio

ffmpeg -i BioRender.mp4 -i BioRender.m4a -codec copy -shortest BioRender_merge.mp4

ImageMagick

Imagemagick dejó de andar con el error: convert: attempt to perform an operation not allowed by the security policy `PDF' @ error/constitute.c/IsCoderAuthorized/408.

Y seguí esta guia para cambiar "none" a "read|write" en una línea de este archivo:

  nano /etc/ImageMagick-7/policy.xml

De:

<policy domain="coder" rights="none" pattern="PDF" />

A:

<policy domain="coder" rights="read|write" pattern="PDF" />

GIFs con transparencia

Hacer GIFs con .png con transparencia

  convert -delay 5 -dispose Background -loop 0 *.png myimage.gif

Imagenes a PDF monocromo

convert *.jpg -colorspace gray +dither -auto-level -threshold 70% -type bilevel output.pdf

Parallel

Convertir varios archivos en paralelo con ffmpeg:

  for i in *.wav; do ffmpeg -i "${i}" -b:a 128000 "${i%.wav}.mp3"; done
  find . -name "*.wav" | parallel ffmpeg -i {} -b:a 128000 {.}.mp3

Duplicados

Para encontrar nombres de archivo duplicados en dos carpetas:

1) Buscar duplicados en las carpetas por separado

  find /pathToDir1/ -type f -printf "%f\n" | sort | uniq -cd
  find /pathToDir2/ -type f -printf "%f\n" | sort | uniq -cd

2) Buscar los duplicados y armar una listita con los que tienen exactamente dos copias

  find /pathToDir1/ /pathToDir2/ -type f -printf "%f\n" | sort | uniq -cd
  find /pathToDir1/ /pathToDir2/ -type f -printf "%f\n" | sort | uniq -c | egrep '^ *2 ' | gawk '{print $2}' > rm.list

3) Remove

  xargs rm < 1.txt  # No verifiqué si son un problema los archivos con espacios en el nombre

Links:

BASH

Algunas cheatsheets.

Timestamp en BASH history.

Buscar archivos que contienen un string grep -nrl https://unix.stackexchange.com/questions/65181/list-the-files-containing-a-particular-word-in-their-text

En Arch, rename es una versión chota de perl-rename: https://bbs.archlinux.org/viewtopic.php?id=85128 Instalar: sudo pacman -Syu perl-rename perl-rename -v 's/.jpeg/.jpg/' *.jpeg

Disk IO speed test https://www.shellhacks.com/disk-speed-test-read-write-hdd-ssd-perfomance-linux/

sync; date; dd if=/dev/zero of=tempfile bs=1M count=2048; sync; date; rm tempfile;

Slic3r dejó de iniciar por un warning de Perl sobre el locale (el de siempre...) https://www.itechlounge.net/2017/01/linux-perl-warning-setting-locale-failed/

Agregué esto a /etc/environment y volvió a funcionar:

  LC_ALL="en_US_.UTF-8"

No sé por qué es tan difícil hacer que esto no pase más...

.bashrc

  # Usefil alias
  alias h='history | grep'

ZSH

Uso "oh my zsh" para configurarla.

En el archivo .zshrc hay una varible:

  export ZSH="/usr/share/oh-my-zsh/"

Puede apuntar a la instalacion por AUR, o a una carpeta en el home; donde sea que este oh-my-zsh instalado.

El tema que me gusta se llama "gentoo". Pero queria el fondo negro del "blinks" para diferenciar la parte de escribir del output.

Copie el archivo /usr/share/oh-my-zsh/themes/gentoo.zsh-theme y cree gentoo2.zsh-theme con este contenido:

function prompt_char {
    if [ $UID -eq 0 ]; then echo "#"; else echo $; fi
}

PROMPT='%K{black}%(!.%{$fg_bold[red]%}.%{$fg_bold[green]%}%n@)%m %{$fg_bold[blue]%}%(!.%1~.%~) $(git_prompt_info)$(prompt_char)%b '

RPROMPT='%k'

ZSH_THEME_GIT_PROMPT_PREFIX="("
ZSH_THEME_GIT_PROMPT_SUFFIX=") "
  • El codigo %K{black} inicia el fondo negro en PROMPT, y el %k lo termina en RPROMPT (right prompt).
  • Removi el codigo ${$reset_color} porque hacia cosas raras con el fondo al escribir y luego borrar.

Importante

Los colores definidos en el tema de ZSH no son suficientes para que se "vean". También hay que cambiar los colores en el emulador de terminal (Konsole en mi caso).

make y autotools

Más info sobre autotools.

Este fue útil: http://smalltalk.gnu.org/blog/bonzinip/all-you-should-really-know-about-autoconf-and-automake

Este no lo leí pero parece lindo (?): http://blog.fourthbit.com/2013/06/18/creating-an-open-source-program-in-c-with-autotools-part-1-of-2

nmap

Quick:

nmap -sn 192.168.2.0/24

Ver:

Brillo y temperatura del monitor

En .bashr agregar:

alias bright="redshift -m randr:crtc=1 -P -r -l -34.5:-58.26 -O 2200 -b"

Y usar:

bright 0.5 # 50%

Ver:

grep