Take the 2-minute tour ×
Ask Ubuntu is a question and answer site for Ubuntu users and developers. It's 100% free, no registration required.

Recently I created a link with the following:

sudo ln -n originalFileLocation

How do I delete a hard link?

share|improve this question
3  
FYI: ln -n /path/to/file creates a file named file in the current directory and is shorthand for ln --no-dereference /path/to/file. This means that if /path/to/file is a symbolic link, the newly created hardlink will point to that symlink instead of the target of the symlink. –  Lekensteyn Nov 5 '11 at 10:28

3 Answers 3

up vote 12 down vote accepted

You can delete it with rm as usual: rm NameOfFile. Note that with hard links there is no distinction between "the original file" and "the link to the file": you just have two names for the same file, and deleting just one of the names will not delete the other.

share|improve this answer
2  
Also ote you will need to rm it as root (use sudo), if you created it with the command you provided (as super-user). –  Rafał Cieślak Nov 5 '11 at 11:38

Actually rm doesn't work:

[user@localhost Products]$ rm AZP/
rm: cannot remove `AZP/': Is a directory
[user@localhost Products]$ rm -r AZP/
rm: cannot remove `AZP': Not a directory

What works is unlink AZP.

share|improve this answer
    
Are you sure yours was a hard link? Hard links are just like files iirc. –  Seth Mar 12 at 16:59
    
@Seth, actually I don't remember what was that, but it doesn't want to remove as you could see. Somebody told me to use unlink and it worked. :) –  Bunyk Mar 26 at 21:21
    
That's probably because AZP was a file, not a directory, but I couldn't be sure without more information. Unlink should always work though, so no problems there. –  Seth Mar 26 at 22:19

I have this script to remove redundant hard links. But take care - it is quite dangerous.

#!/bin/bash
clear
echo Reduce redundant hardlinks in the current folder
echo ------------------------------------------------
echo 
echo "  $(basename $0) [-R]"
echo "      -R means recursive"
echo 
read -p "You can break by pressing Ctrl+C"
echo
ask=1
if [ a$1 == "a-R" ]; then  recursive=" -R "; fi

for i in $(ls -i $recursive | awk '{print $1}' | uniq --repeated | sort); 
do 
    echo "Inode with multiple hardlinked files: $i"
    first=1
    for foundfile in $(find . -xdev -inum $i);
    do 
        if [ $first == 1 ]; then
            echo "  preserving the first file:  $foundfile"
            first=0
        else
            echo "  deleting the redundant file:    $foundfile"  
            #rm $foundfile  
        fi
    done 
    if [ $ask == 1 ]; then 
        read -p "Delete all the rest of redundant hardlinks without asking? y/N "
        if [ a${REPLY,,} == "ay" ]; then  ask=0; fi
    fi  
#   read -p "pause for sure"
    echo
done
echo "All redundant hardlins are removed."
echo
share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.