Récemment, j'ai créé un lien avec les éléments suivants:
sudo ln -n originalFileLocation
Comment supprimer un lien dur?
Récemment, j'ai créé un lien avec les éléments suivants:
sudo ln -n originalFileLocation
Comment supprimer un lien dur?
Réponses:
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 n'avez que deux noms pour le même fichier, et la suppression d'un seul des noms ne supprimera pas l'autre.
sudo
), si vous l'avez créé avec la commande que vous avez fournie (en tant que super-utilisateur).
J'ai ce script pour supprimer les liens durs redondants. Mais attention, 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
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, c'est unlink AZP
.
AZP/
ressemble à un répertoire, rm ne fonctionne pas sur les répertoires sans l'indicateur récursif. Toujours selon les documents de coreutills. >>> La plupart des systèmes interdisent de créer un lien dur vers un répertoire; sur ceux où cela est autorisé, seul le super-utilisateur peut le faire (et avec prudence, car la création d'un cycle causera des problèmes à de nombreux autres utilitaires).
AZP
est un lien symbolique vers un répertoire (ou quoi que ce soit d'autre) rm AZP/
ne fonctionnera pas car rm
pense que c'est un répertoire (à cause de /
la fin). Cependant, rm AZP
cela fonctionnera très bien. -1
Si vous souhaitez supprimer uniquement le lien et conserver ainsi le fichier d'origine, vous devez utiliser un lien.
unlink(1)
passe? Il s'agit d'un wrapper peu profond autour de l' unlink(2)
appel système, le même appel système rm(1)
utilisé pour tous les fichiers qui ne sont pas des répertoires.
unlink
, malgré son nom, ne séparera pas un lien fixe en deux fichiers distincts, mais supprimera l'entrée de répertoire "non liée" (mais pas le fichier / contenu / inode, tant que le nombre de liens est> 1).
ln -n /path/to/file
crée un fichier nomméfile
dans le répertoire courant et est un raccourci pourln --no-dereference /path/to/file
. Cela signifie que si/path/to/file
est un lien symbolique, le lien dur nouvellement créé pointera vers ce lien symbolique au lieu de la cible du lien symbolique.