Recientemente creé un enlace con lo siguiente:
sudo ln -n originalFileLocation
¿Cómo elimino un enlace duro?
Recientemente creé un enlace con lo siguiente:
sudo ln -n originalFileLocation
¿Cómo elimino un enlace duro?
Respuestas:
Se puede eliminar con rm
como de costumbre: rm NameOfFile
. Tenga en cuenta que con los enlaces duros no hay distinción entre "el archivo original" y "el enlace al archivo": solo tiene dos nombres para el mismo archivo, y eliminar solo uno de los nombres no eliminará el otro.
sudo
), si lo creó con el comando que proporcionó (como superusuario).
Tengo este script para eliminar enlaces duros redundantes. Pero ten cuidado, es bastante peligroso.
#!/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 realidad rm
no funciona:
[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
Lo que funciona es unlink AZP
.
AZP/
parece un directorio, rm no funciona en directorios sin la bandera recursiva. También de acuerdo con los documentos coreutills. >>> La mayoría de los sistemas prohíben hacer un enlace duro a un directorio; en aquellos donde está permitido, solo el superusuario puede hacerlo (y con precaución, ya que crear un ciclo causará problemas a muchas otras utilidades).
AZP
es un enlace simbólico a un directorio (o cualquier otra cosa) rm AZP/
no funcionará porque rm
piensa que es un directorio (debido /
al final). Sin embargo rm AZP
funcionará bien. -1
Si desea eliminar solo el enlace y, por lo tanto, conservar el archivo original, debe usar unlink.
unlink(1)
hace? Es una envoltura poco profunda alrededor de la unlink(2)
llamada al sistema, la misma llamada al sistema que se rm(1)
usa para todos los archivos que no son directorios.
unlink
, a pesar de su nombre, no separará un enlace fijo en dos archivos separados, pero eliminará la entrada del directorio "no vinculado" (pero no el archivo / contenido / inodo, siempre que el recuento de enlaces sea> 1).
ln -n /path/to/file
crea un archivo nombradofile
en el directorio actual y es la abreviatura deln --no-dereference /path/to/file
. Esto significa que si se/path/to/file
trata de un enlace simbólico, el enlace duro recién creado apuntará a ese enlace simbólico en lugar del destino del enlace simbólico.