Respostas:
Você pode excluí-lo com rm
as usual: rm NameOfFile
. Observe que, nos links físicos, não há distinção entre "o arquivo original" e "o link para o arquivo": você só tem dois nomes para o mesmo arquivo e a exclusão de apenas um nome não excluirá o outro.
sudo
), se você o criou com o comando que forneceu (como superusuário).
Eu tenho esse script para remover links físicos redundantes. Mas tome cuidado - é bastante perigoso.
#!/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
Na verdade rm
não 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
O que funciona é unlink AZP
.
AZP/
parece um diretório, o rm não opera em diretórios sem o sinalizador recursivo. Também de acordo com os documentos coreutills. >>> A maioria dos sistemas proíbe a criação de um link físico para um diretório; naqueles em que é permitido, apenas o superusuário pode fazê-lo (e com cuidado, pois a criação de um ciclo causará problemas a muitos outros utilitários).
AZP
é um link simbólico para um diretório (ou qualquer outra coisa) rm AZP/
não funcionará porque rm
pensa que é um diretório (por causa do /
no final). No entanto, rm AZP
irá funcionar muito bem. -1
Se você deseja remover apenas o link e, assim, manter o arquivo original, precisará desvincular.
unlink(1)
faz? É um invólucro superficial em torno da unlink(2)
chamada do sistema, a mesma chamada de sistema rm(1)
usada para todos os arquivos que não são diretórios.
unlink
, apesar do nome, não separará um link físico em dois arquivos separados, mas removerá a entrada de diretório "desvinculada" (mas não o arquivo / content / inode, contanto que a contagem de links seja> 1).
ln -n /path/to/file
cria um arquivo nomeadofile
no diretório atual e é uma abreviação deln --no-dereference /path/to/file
. Isso significa que, se/path/to/file
for um link simbólico, o novo hardlink criado apontará para esse link simbólico, em vez do destino do link simbólico.