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 …

×