This project contains useful bash aliases and functions. Bash aliases are essentially shortcuts that save you from having to remember long commands and save you a lot of typing when working on the command line.
To make the alias or function persistent you need to declare it in the ~/.bashrc file. If you want to make your ~/.bashrc more modular, you can store your aliases in a separate file. Some distributions, such as Ubuntu and Debian, include a ~/.bash_aliases file that is referenced in ~/.bashrc.
Pick the shortcuts you are interested in and copy the code into one of the files mentioned above.
Alias definition:
sudo='sudo '
Usage:
sudo <youralias>
How it works: If the last character of the alias value is a blank, then the next command word following the alias is also checked for alias expansion. See https://www.gnu.org/savannah-checkouts/gnu/bash/manual/bash.html?ref=linuxhandbook.com#Aliases.
Alias definition:
function mount.iso() {
    # $1: the iso file
    if [ $# -eq 1 ]; then
        sudo mkdir -p /media/iso 
        sudo mount -o loop -t iso9660 "$1" /media/iso
    else
        echo Usage: mount.iso \<iso-file\>
    fi
}
function umount.iso() {
    sudo umount /media/iso
    sudo rmdir /media/iso
}
Convert MP4 files to MP3 files:
alias convert.mp42mp3='for f in *.mp4; do ffmpeg -i "$f" "${f%.mp4}.mp3"; done'
Convert MOV files to MP4 files
alias convert.mov2mp4='for i in *.mov; do ffmpeg -i "$i" -vcodec h264 -crf 30 -acodec aac "${i%.mov}_new.mp4"; done'
Convert high quality MP4 files to MP4 files with lower quality:
alias convert.mp42mp4='for i in *.mp4; do ffmpeg -i "$i" -vcodec h264 -crf 30 -acodec aac "${i%.mp4}_new.mp4"; done'
Or if the conversion is to be done for individual files:
function convert.mp42mp4.file() {
    # $1: input file name
    if [ "$#" == 0 ]; then
        echo Usage: convert.mp42mp4.file \<file\> [\<file\> ...]
        return 1
    else
        for n in "$@"
        do
            if [ "${n##*.}" == "mp4" ]; then
                outputFile="${n%.*}"_new.mp4
                ffmpeg -i "$n" -vcodec h264 -crf 30 -acodec aac "$outputFile"
            fi
        done
    fi
}
function download.m3u8 {
    # $1: m3u8 url
    # $2: output filename
    if [ $# -eq 2 ]; then
        cd ~/Downloads
        ffmpeg -protocol_whitelist file,http,https,tcp,tls,crypto -i "$1" -c copy "$2"
    else
        echo Usage: download.m3u8 \<m3u8-url\> \<output-file\>
    fi
}
function mkdir.mp3() {
    # $1: start index
    if [ "$#" != 1 ]; then
        echo Usage: mkdir.mp3 \<start-index\>
        return 1
    else
        # check input
        if [ $(($1 % 6)) != 1 ]; then
            echo Error: Input is not a valid start index
            return 1
        fi
        
        lastIndex=$(($1+5))
        folder=MP3_$1-$lastIndex
        for i in $(seq $1 $lastIndex);
        do
            mkdir -p $folder/MP3_$i
        done
    fi
}
function tar.encrypt() {
    # $1...: files or folders to encrypt
    if [ "$#" == 0 ]; then
        echo Usage: tar.encrypt \<file\> [\<file\> ...]
        return 1
    else
        tar czvpf - "$@" | gpg --symmetric --cipher-algo aes256 -o archive.tar.gz.gpg
    fi
}
function tar.decrypt() {
    # $1: archive to decrypt
    if [ "$#" != 1 ]; then
        echo Usage: tar.decrypt \<archive\>
        return 1
    else
        gpg -d $1 | tar xzvf -
    fi
}
function grep.findfiles() {
    # $1: search text
    # $2: directory
    if [ "$#" != 2 ]; then
        echo Usage: grep.findfiles \<search-text\> \<directory\>
        return 1
    else
        # -R: recursive
        # -i: ignore case
        # -l: print the name of the files
        grep -Ril "$1" "$2"
    fi
}
https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html
${param#pattern} : pattern must match the beginning of param, the rest is returned
${param%pattern} : pattern must match the ending of param, the rest is returned