In: computer, technology.
Linux CLI snippets
For some reason, the HTML export of this page is terrible…
Count lines
find . -type f -name ‘*.py’ | xargs wc -l
find . -type f -name ‘*.js’ | xargs wc -l
Remove files
Remove all files/directories except for one file:
find . ! -name ‘file.txt’ -type f -delete
ls -a | grep -v ‘.jpeg’ | xargs rm -v
ls --hide=file.txt | xargs -d ‘\n’ rm -v
Disks
### list disk devices
lsblk -rpo “name,type,fstype,size,mountpoint”
### list disks with details
sudo fdisk -l (or -x)
### disk usage (local, human readable)
df -hl
File sizes
### size of folders depth=1, with the total
du -h -d 1 /path/to/folder/
### size of files & folders of current dir, no total
du -sh – *
### size of files 1 (sorted)
find /path/to/folder/ -type f -ls | sort -nr -k7
### size of files 2 (sorted)
find /path/to/folder/ -type f -exec du -ah {} + | sort -hr
### fild specific extensions
find /path/to/folder/ -type f \( -name “*.AVI” -o -name “*.MP4” -o -name “*.MOV” \) -print
find /path/to/folder/ -type f \( -name “*.JPG” -o -name “*.JPEG” -o -name “*.PNG” -o -name “*.GIF” \) -print
Mass rename
# test the pattern first, before doing anything stupid
file=“File-123.JPEG” ; echo “${file/.JPE*G/.jpg}”
# replace all
file=“Fileee-123.JPEG” ; echo “${file//e/E}”
# match beginning
file=“Fileee-123.JPEG” ; echo “${file/#F/x}”
# match the end
file=“Fileee-123.JPEG” ; echo “${file/%G/x}”
### deep mass rename
find /path/to/folder/ -type f -name ‘*.txt’ -print0 | xargs -0 -n1 bash -c ‘mv -v “$0” “${0/old/new}”’
find /path/to/folder/ -type f -name ‘*.JPEG’ -print0 | xargs -0 -n1 bash -c ‘mv -v “$0” “${0/.JPE*G/.jpg}”’
find /path/to/folder/ -type f -name ‘*.PNG’ -print0 | xargs -0 -n1 bash -c ‘mv -v “$0” “${0/.PNG/.png}”’
Mass delete DANGER
# delete deep!
# here can also use -maxdepth 2 or whatever
find /path/to/folder -type f -name '*.bak -exec rm -vf {} \;
## OR ##
find /path/to/folder -type f -name '*.bak -delete
Replace a string in multiple files
### using SED, same folder
cd /path/to/folder
sed -i ‘.bak’ ‘s/old-word/new-word/g’ *
### using SED, same folder
sed --debug -i ‘s@old_path@new_path@g’ *
### deep find + sed
find . -type f -exec sed -i ‘s/old-word/new-word/’ {} \;
### deep replace, case insensitive
grep -rli ‘old-word’ * | xargs -i@ sed -i ‘s/old-word/new-word/g’ @
GPG manage keys
https://gitpiper.com/cheatsheet/gnupg
gpg --list-keys
gpg --list-secret-keys
gpg --delete-key ABC
gpg --delete-secret-key XYZ
# Export public & private keys
gpg --export --armor ABC > public.key # extensions: asc, key, pgp, txt
gpg --export --armor --output public.pgp ABC
gpg -a --export-secret-keys XYZ > secret-gpg.key
gpg --export-ownertrust > ownertrust-gpg.txt
# Import keys
gpg --import secret-gpg.key
gpg --import-ownertrust ownertrust-gpg.txt
# Announce keys on Key Servers
gpg --keyserver hkp://pgp.mit.edu --send-keys …
gpg --keyserver hkp://pgp.surfnet.nl --send-keys …