find
# Regex Find Playlist Files
find . -type f -regextype posix-extended -regex ".*.(m3u|pls)$"
# Notes on Name:
-name pattern
Base of file name (the path with the leading directories
removed) matches shell pattern pattern. The metacharacters
(`*', `?', and `[]') match a `.' at the start of the base name
(this is a change in findutils-4.2.2; see section STANDARDS CON‐
FORMANCE below). To ignore a directory and the files under it,
use -prune; see an example in the description of -path. Braces
are not recognised as being special, despite the fact that some
shells including Bash imbue braces with a special meaning in
shell patterns. The filename matching is performed with the use
of the fnmatch(3) library function. Don't forget to enclose
the pattern in quotes in order to protect it from expansion by
the shell.
# Exclude all files with ".01_" and ".15_"; find only files older than 30 days
BACKUP_DIR="/mnt/storage/backup"
find ${BACKUP_DIR} ! -name '*.01_*' ! -name '*.15_*' -mtime +30 -type f -delete -printf "Delete: %f\n"
# Minimum Depth
find . -mindepth 2 -type d -empty
# Find empty files
find . -mindepth 2 -type f -empty
# Print all Movie Folders that are empty
find . -mindepth 1 -maxdepth 1 -type d -empty -printf "%f\n"
# unrar each part1.rar file
find . -name "*.part1.rar" -exec unrar x {} \;
find . -name "*.rar" -execdir unrar x {} \;
# Scene Extraction:
find . -type f -name '*.rar' -execdir unrar x {} \;
find . -type f -name '*.rar' -execdir sh -c 'rm "${0%%.rar}".r??' {} \;
# Files older than 180d
cd /mnt/xenon/HF_WIP/ && find . -mtime 180
# Meta files
# TODO: Add Size to reduce risk of deleting important data
find . -name 'Thumbs.db' -type f -delete
find . -name '*.DS_Store' -type f -delete
find . -name '._*' -type f -delete
# Meta directories
find . -name '*.' -type d -delete
# Empty directories
find . -type d -empty -delete
# Delete OS-Metadata
find /mnt/video05 \( -name ".DS_Store" -or -name ".AppleDouble" -or -name ".Trashes" -or -name "._*" -or -name ".TemporaryItems" \) -delete
find /mnt/drive -name ".AppleDouble" -delete
# Safer Version of Metadata deletion:
find /mnt/video0{1,5} \( -name ".DS_Store" -or -name ".AppleDouble" -or -name ".Trashes" -or -name "._*" -or -name ".TemporaryItems" \) -size -2m -type f -delete
find /mnt/video0{1,5} -type d -empty -delete
-mtime +60 means you are looking for a file modified >=60 days ago. -mtime -60 means less than 60 days. -mtime 60 If you skip + or – it means exactly 60 days.
# Find 0 Byte Files in last 30 days (by modtime)
find . -mtime 30 -type f -size 0 -print
# Find 0 Byte Files in last 30 days (by accesstime)
find . -atime 30 -type f -size 0 -print
# Anytime
find "$project" -type f -size 0 -print
# Looped
for project in *
do
echo "$project"
find "$project" -type f -iname "*.*" -size 0 -print | wc -l
done
# Find all files older than 7 days and delete
# => HF_SCAN example
find /path/to/folder/ -mtime +7 -type f -delete
# Find Sample Folders and delete
find . -type d -name "Sample" -exec echo "{}" \;
set -e
find /mnt/archive/movies -type d -name '_archive' -print -execdir bash -c "cd {} && ls -l" \; # cd to dir and list files
# cd to _archive folder, move content to parent (include dotfiles)
find /mnt/archive/movies \
-type d \
-name '_archive' \
-print \
-execdir bash -c "shopt -s dotglob; cd {} && mv * ../" \;
find /mnt/archive/movies -type d -empty -delete
cleanup disks (cronjob)
In some cases you can't always enforce the clients to behave nicely (thanks macOS!) ⥊ In that case we need to do some server-site cleanings. Here we delete all the junk metadata the clients leave on our beloved NAS System. I'd say if you set them as a @daily
crontask, that should be enough.
find /mnt/video0{1,5} \( -name ".DS_Store" -or -name ".AppleDouble" -or -name ".Trashes" -or -name "._*" -or -name ".TemporaryItems" \) -size -2m -type f -delete
# Delete empty directores
find /mnt/video0{1,5} -type d -empty -delete
# delete empty files
find /mnt/video0{1,5} -type f -empty -delete