Monday, May 7, 2012

recursively remove broken symlinks in bash

Weblog for atrixnet - recursively remove broken symlinks in bash

Posted by Anonymous (78.32.xx.xx) on Sat 27 Sep 2008 at 01:00
Totally 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 {} \;

No comments:

Post a Comment