web-dev-qa-db-fra.com

Comment puis-je supprimer un lien dur?

Récemment, j'ai créé un lien avec les éléments suivants:

Sudo ln -n originalFileLocation

Comment puis-je supprimer un lien dur?

20
hawkeye

Vous pouvez le supprimer avec rm comme d'habitude: rm NameOfFile. Notez qu'avec les liens physiques, il n'y a pas de distinction entre "le fichier d'origine" et "le lien vers le fichier": vous avez juste deux noms pour le même fichier et la suppression d'un seul des noms ne supprime pas l'autre.

34
Prateek

J'ai ce script pour supprimer les liens durs redondants. Mais prenez garde - c'est assez dangereux.

#!/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
2
xerostomus

En fait, rm ne fonctionne pas:

[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

Ce qui fonctionne est unlink AZP.

1
Bunyk

Si vous souhaitez supprimer uniquement le lien et conserver ainsi le fichier d'origine, vous devez utiliser unlink.

0
fbo72