Di recente ho creato un collegamento con il seguente:
sudo ln -n originalFileLocation
Come posso eliminare un collegamento reale?
Di recente ho creato un collegamento con il seguente:
sudo ln -n originalFileLocation
Come posso eliminare un collegamento reale?
Risposte:
È possibile eliminare con rmcome al solito: rm NameOfFile. Si noti che con i collegamenti reali non esiste alcuna distinzione tra "il file originale" e "il collegamento al file": si hanno solo due nomi per lo stesso file e l'eliminazione di uno solo dei nomi non cancellerà l'altro.
sudo), se lo hai creato con il comando che hai fornito (come superutente).
Ho questo script per rimuovere i collegamenti reali ridondanti. Ma fai attenzione: è abbastanza pericoloso.
#!/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
In realtà rmnon funziona:
[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
Ciò che funziona è unlink AZP.
AZP/sembra una directory, rm non funziona su directory senza il flag ricorsivo. Anche secondo i documenti di coreutills. >>> La maggior parte dei sistemi proibisce di creare un collegamento reale a una directory; su quelli dove è consentito, solo il superutente può farlo (e con cautela, poiché la creazione di un ciclo causerà problemi a molte altre utilità).
AZPè un collegamento simbolico a una directory (o qualsiasi altra cosa) rm AZP/non funzionerà perché rmpensa che sia una directory (a causa della /fine). Tuttavia rm AZPfunzionerà bene. -1
Se si desidera rimuovere solo il collegamento e quindi conservare il file originale, è necessario utilizzare scollega.
unlink(1)fa? È un wrapper superficiale attorno alla unlink(2)chiamata di sistema, la stessa chiamata di sistema che rm(1)utilizza per tutti i file che non sono directory.
unlink, nonostante il nome, non separerà un hardlink in due file separati, ma rimuoverà la voce di directory "non collegata" (ma non il file / contenuto / inode, purché il conteggio dei collegamenti sia> 1).
ln -n /path/to/filecrea un file denominatofilenella directory corrente ed è una scorciatoia perln --no-dereference /path/to/file. Ciò significa che se si/path/to/filetratta di un collegamento simbolico, il collegamento reale appena creato punterà a quel collegamento simbolico anziché alla destinazione del collegamento simbolico.