Recursively remove files

LinuxBash

Linux Problem Overview


Does anyone have a solution to remove those pesky ._ and .DS_Store files that one gets after moving files from a Mac to A Linux Server?

specify a start directory and let it go? like /var/www/html/ down...

Linux Solutions


Solution 1 - Linux

change to the directory, and use:

find . -name ".DS_Store" -print0 | xargs -0 rm -rf
find . -name "._*" -print0 | xargs -0 rm -rf

Not tested, try them without the xargs first!

You could replace the period after find, with the directory, instead of changing to the directory first.

find /dir/here ...

Solution 2 - Linux

find /var/www/html \( -name '.DS_Store' -or -name '._*' \) -delete

Solution 3 - Linux

Newer findutils supports -delete, so:

find . -name ".DS_Store" -delete

Add -print to also get a list of deletions.

Command will work for you if you have an up-to-date POSIX system, I believe. At least it works for me on OS X 10.8 and works for others who've tested it on macOS 10.12 (Mojave).

Credit to @ephemient in a comment on @X-Istence's post (thought it was helpful enough to warrant its own answer).

Solution 4 - Linux

Simple command:

rm `find ./ -name '.DS_Store'` -rf
rm `find ./ -name '._'` -rf

Good luck!

Solution 5 - Linux

cd /var/www/html && find . -name '.DS_Store' -print0 | xargs -0 rm
cd /var/www/html && find . -name '._*' -print0 | xargs -0 rm

Solution 6 - Linux

You could switch to zsh instead of bash. This lets you use ** to match files anywhere in a directory tree:

$ rm /var/www/html/**/_* /var/www/html/**/.DS_Store

You can also combine them like this:

$ rm /var/www/html/**/(_*|.DS_Store)

Zsh has lots of other features that bash lacks, but that one alone is worth making the switch for. It is available in most (probably all) linux distros, as well as cygwin and OS X.

You can find more information on the zsh site.

Solution 7 - Linux

find . -name "FILE-TO-FIND"-exec rm -rf {} \;

Solution 8 - Linux

Example to delete "Thumbs.db" recursively;

find . -iname "Thumbs.db" -print0 | xargs -0 rm -rf

Validate by:

find . -iname "Thumbs.db"

This should now, not display any of the entries with "Thumbs.db", inside the current path.

Solution 9 - Linux

It is better to see what is removing by adding -print to this answer

find /var/www/html \( -name '.DS_Store' -or -name '._*' \) -delete -print

Solution 10 - Linux

if you have Bash 4.0++

#!/bin/bash
shopt -s globstar
for file in /var/www/html/**/.DS_Store /var/www/html/**/._ 
do
 echo rm "$file"
done

Solution 11 - Linux

A few things to note:

'-delete' is not recursive. So if .TemporaryItems (folder) has files in it, the command fails.

There are a lot of these pesky files created by macs: .DS_Store ._.DS_Store .TemporaryItems .apdisk

This one command addresses all of them. Saves from running find over and over again for multiple matches.

find /home/foo \( -name '.DS_Store' -or -name '._.DS_Store' -or -name '._*' -or -name '.TemporaryItems' -or -name '.apdisk' \) -exec rm -rf {} \;

Solution 12 - Linux

This also works:

sudo rm -rf 2018-03-*

here your deleting files with names of the format 2018-03-(something else)

keep it simple

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionJT.View Question on Stackoverflow
Solution 1 - LinuxX-IstenceView Answer on Stackoverflow
Solution 2 - LinuxOneOfOneView Answer on Stackoverflow
Solution 3 - LinuxrattrayView Answer on Stackoverflow
Solution 4 - LinuxKimKhaView Answer on Stackoverflow
Solution 5 - LinuxmopokeView Answer on Stackoverflow
Solution 6 - LinuxDave KirbyView Answer on Stackoverflow
Solution 7 - LinuxMartin BeckettView Answer on Stackoverflow
Solution 8 - LinuxparasrishView Answer on Stackoverflow
Solution 9 - LinuxAhmad YoosofanView Answer on Stackoverflow
Solution 10 - Linuxghostdog74View Answer on Stackoverflow
Solution 11 - LinuxKaran BhallaView Answer on Stackoverflow
Solution 12 - LinuxpranavhdView Answer on Stackoverflow