Kürzlich habe ich einen Link mit folgendem erstellt:
sudo ln -n originalFileLocation
Wie lösche ich einen Hardlink?
Kürzlich habe ich einen Link mit folgendem erstellt:
sudo ln -n originalFileLocation
Wie lösche ich einen Hardlink?
Antworten:
Sie können es mit löschen rm
wie gewohnt: rm NameOfFile
. Beachten Sie, dass bei festen Verknüpfungen kein Unterschied zwischen "der Originaldatei" und "der Verknüpfung mit der Datei" besteht: Sie haben nur zwei Namen für dieselbe Datei, und wenn Sie nur einen der Namen löschen, wird der andere nicht gelöscht.
sudo
), wenn Sie es mit dem von Ihnen angegebenen Befehl (als Superuser) erstellt haben.
Ich habe dieses Skript, um redundante Hardlinks zu entfernen. Aber pass auf - es ist ziemlich gefährlich.
#!/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
Funktioniert eigentlich rm
nicht:
[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
Was funktioniert ist unlink AZP
.
AZP/
sieht aus wie ein Verzeichnis, rm bearbeitet keine Verzeichnisse ohne das rekursive Flag. Auch nach den coreutills docs. >>> Die meisten Systeme verbieten das Herstellen einer festen Verbindung zu einem Verzeichnis. Wenn dies zulässig ist, kann dies nur der Superuser (und dies mit Vorsicht, da das Erstellen eines Zyklus bei vielen anderen Dienstprogrammen zu Problemen führt).
AZP
ist ein symbolischer Link zu einem Verzeichnis (oder etwas anderem) rm AZP/
wird nicht funktionieren, weil rm
denkt, es ist ein Verzeichnis (wegen der /
am Ende). Allerdings rm AZP
wird gut funktionieren. -1
Wenn Sie nur den Link entfernen und somit die Originaldatei behalten möchten, müssen Sie den Link entfernen.
unlink(1)
? Es ist eine flache Hülle um den unlink(2)
Systemaufruf, derselbe Systemaufruf, rm(1)
der für alle Dateien verwendet wird, die keine Verzeichnisse sind.
unlink
Trotz des Namens wird ein fest verknüpfter Ordner nicht in zwei separate Dateien aufgeteilt, sondern der "nicht verknüpfte" Verzeichniseintrag entfernt (nicht jedoch die Datei / content / inode, solange die Anzahl der Verknüpfungen> 1 ist).
ln -n /path/to/file
Erstellt eine Datei mit dem Namenfile
im aktuellen Verzeichnis und ist eine Kurzform fürln --no-dereference /path/to/file
. Dies bedeutet, dass, wenn/path/to/file
es sich um einen symbolischen Link handelt, der neu erstellte Hardlink auf diesen Symlink anstatt auf das Ziel des Symlinks verweist.