Weblog for atrixnet - recursively remove broken symlinks in bash
Posted by Anonymous (78.32.xx.xx) on Sat 27 Sep 2008 at 01:00Totally cheating, but after searching for "exist" in the GNU find man page:
find -L . -type l -print0 | xargs -0 --no-run-if-empty rm
With -L (follow symbolic links), -type l matches against the type of the link's target (recursively following links if it's a symlink to a symlink) - unless that target does not exist, in which case it matches against the link.
(The -print0 and -0 options are specific to GNU find and xargs, and allow you to operate on files with bizarre names, e.g. containing newlines, by using the \0 (NUL) character as the line separator. There are only two characters not allowed in Unix filenames - NUL and '/'.)
If that's too subtle, here's a more long-winded solution:
find . | while read -r FILE; do
if ! test -e "$FILE"; then
rm "$FILE"
fi
done
Linux or Unix find and remove files with one find command on fly
Linux or UNIX - Find and remove file syntax
To remove multiple files such as *.jpg or *.sh with one command find, use
find . -name "FILE-TO-FIND"-exec rm -rf {} \;
OR
find . -type f -name "FILE-TO-FIND" -exec rm -f {} \;