I moved a directory containing a bunch of symbolic links today, and the links all broke. I fixed the links with the following Bash oneliner (split across lines in this post for clarity): $ for FILE in *; do if [ -L "${FILE}" ]; then TARGET=$(readlink "${FILE}"); rm -f "${FILE}"; ln -s "${TARGET/old-dir\//}" "${FILE}"; fi; done `readlink` prints the value of a symbolic link and `${TARGET/old-dir\//}` creates the new link target by removing `old-dir/` from the original target. You may also find it useful to rename simlinks so that the link filename matches the target filename: $ for x in *; do y=$(basename $(readlink -f "${x}")); mv "${x}" "${y}"; done This assumes that everything globbed into `x` is a link. If not, you can add an `if [ -L "${x}" ]` block like I did in my target-translation example. [[!tag tags/linux]]