Linux

Quick Commands

Archives

Extract all '*.zip' files into a directory named after the zip's filename

find -name '*.zip' -exec sh -c 'unzip -d "${1%.*}" "$1"' _ {} \;

Extract all '*.rar' files into a directry named after the rar's filename

find -name '*.rar' -exec sh -c 'mkdir "${1%.*}"; unrar e "$1" "${1%.*}"' _ {} \;

Extract all '*.7z' files into a directry named after the rar's filename

find -name '*.7z' -exec sh -c 'mkdir "${1%.*}"; 7z x "$1" -o"${1%.*}"' _ {} \;

Extrat all '*.tar' files into a directory named after the tar's filename

find -name '*.tar' -exec sh -c 'mkdir -p "${1%.*}"; tar -C "${1%.*}" -xvf "$1"' _ {} \;

Extrat all '*.tar.gz' files into a directory named after the tar's filename

find -name '*.tar.gz' -or -name '*.tgz' -exec sh -c 'mkdir -p "${1%.*}"; tar -C "${1%.*}" -xvzf "$1"' _ {} \;

Music

Convert all FLAC to MP3 (same directory)

find -name "*.flac" -print | parallel -j 14 ffmpeg -i {} -acodec libmp3lame -ab 192k {.}.mp3 \;

Convert all OGG to FLAC (same directory)

find -name "*.ogg" -print | parallel -j 14 ffmpeg -i {} -c:a flac {.}.flac \;

Documents

Convert PDFs to PNGs (each page is its own image)

for file in *.pdf; do
    echo "Processing file: $file ..."
    mkdir -p "$(basename "$file" .pdf)"
    pdftoppm -png "$file" "$(basename "$file" .pdf)/page"
done

Run tesseract OCR on all converted Pages

for file in */*.png; do
    echo "Processing file: $file ..."
    tesseract -l deu+eng "$file" "$(echo "$file" | sed 's/\.png$//g')"
done
Hint: The -l deu+eng are the languages to use. In this case deu+eng means deu "Deutsch" (German) and eng "English".

Convert all '*.docx' files into PDFs (using LibreOffice's lowriter)

find . -name '*.docx' -print0 |
    while IFS= read -r -d $'\0' line; do
        echo "Processing file: $line ..."
        lowriter --convert-to pdf "$line" --outdir "$(dirname "$line")"
    done

Disks

Get UUID for partition

blkid /dev/sdXY -s UUID -o value

Where /dev/sdXY could be, /dev/sda2, /dev/nvme0n1p1, and so on.

Images

Optimize JPEG Images

Warning: The -m LEVEL flag reduces the JPEG image quality to that level, in the example below to 95.
$ jpegoptim -p --strip-com --strip-iptc -m 95 IMAGE.jpeg
# Find and optimize PNGs in parallel
$ find \( -iname '*.jpg' -or -iname '*.jpeg' \) -print0 | xargs -n1 -P6 -0 jpegoptim -p --strip-com --strip-iptc -m 95

Optimize PNG Images

$ jpegoptim
# Find and optimize PNGs in parallel
$ find -iname '*.png' -print0 | xargs -n1 -P6 -0 optipng -strip all -clobber -fix -o9

Remove EXIF data from Image(s)

$ exiftool -overwrite_original -all= IMAGE1.jpeg IMAGE2.png ...
# Remove EXIF data from all `*.jpeg` files
$ find \( -iname '*.jpg' -or -iname '*.jpeg' -or -iname '*.png' \) -exec exiftool -overwrite_original -all= {} \;