Files
Find files recursively containing string
Find inside /home/micz/ all
*.tpl` files containing ‘visualchart-create.php’
grep -rnw '/home/micz/' --include \*.tpl -e 'visualchart-create.php'
Find largest files
find . -xdev -type f -size +50M -print | xargs ls -lh | sort -k5,5 -h -r
Will find all items larger than 50MB
in current directory and subdirectories - and sort them by size.
Find files by name recursively
find /var/www/html/ -name "*2018-11-08*"
find . -type f -name '*2018-11-08*' -print
find . -name "foo*"
Remove files recursively ending with tilde
Find first, to be sure your request doesn’t delete more than you want!!!
find . -type f -name '*.*~' -print
If you agree with this list, only then delete…!
find . -type f -name '*.*~' -delete
Standard renaming for whitespaces, special chars
# rename all the files, replace whitespaces
find -name "* *" -type f | rename 's/ /_/g'
# rename file names, replace umlaute and sonderzeichen
find -name "*[äöüÄÖÜß]*" -exec rename 's/ä/ae/g;s/ü/ue/g;s/ß/ss/g;s/Ä/Ae/g;s/Ü/Ue/g;s/Ö/Oe/g;s/ö/oe/g' {} \;
# get rid off some other special chars
find -name "*[,\!\:\?]*" -exec rename 's/,/-/g;s/\!/-/g;s/\:/-/g;s/\?/-/g' {} \;
Rename multiple files by filetype when matching part of string
Remove -n
from below examples to make the actual renaming – not the test run.
# dry run of rename e.g. Testfile-PROCESSED-LOUDNORM.mp3 into Testfile-new.mp3
rename -n 's/-PROCESSED-LOUDNORM/-new/' *.mp3
# dry run of rename e.g. Testfile-PROCESSED-LOUDNORM.mp3 into Testfile.mp3
rename -n 's/-PROCESSED-LOUDNORM//' *.mp3
Replace all file endings recursively
I needed to get all images of a site offline for a while. Also the PDF downloads. Here is the script.
- The following recursively replaces all
.jpg
file endings with.offpg
. - The second line does the same with
.gif
, renaming to.offif
, the third line.png
to.offng
. - The forth line looks at the uppercase version and renames
.JPG
to.offPG
. - The last line renames
.pdf
to.offdf
.
find . -name "*.jpg" -exec rename -v 's/\.jpg$/\.offpg/i' {} \;
find . -name "*.gif" -exec rename -v 's/\.gif$/\.offif/i' {} \;
find . -name "*.png" -exec rename -v 's/\.png$/\.offng/i' {} \;
find . -name "*.JPG" -exec rename -v 's/\.JPG$/\.offPG/i' {} \;
find . -name "*.pdf" -exec rename -v 's/\.pdf$/\.offdf/i' {} \;
Remove the x characters of a bunch of file names
- Replace
x
with the count of chars you want to remove. - The
-n
is for simulating; remove it to get the actual result. - Does change folder names, too!
- Does not change file names recursively in sub folders.
Remove characters at the beginning:
rename -n 's/.{x}(.*)/$1/' *
Remove chars at the end (will change file extension, too):
rename -n "s/.{13}$//" *
Remove file of specific name or file ending in multiple folders
This test run will list all the files that match:
find . -name "folder.conf" -type f
And the following command will delete them (just add -delete
)
find . -name "folder.conf" -type f -delete
FILE CONTENT
Delete the first x characters on every line in a text file
sed 's/^.\{10\}//' file.txt > newfile.txt