Ostatnio utworzyłem link z następującymi elementami:
sudo ln -n originalFileLocation
Jak usunąć twardy link?
Ostatnio utworzyłem link z następującymi elementami:
sudo ln -n originalFileLocation
Jak usunąć twardy link?
Odpowiedzi:
Można usunąć je z rm
jak zwykle: rm NameOfFile
. Zauważ, że w przypadku twardych linków nie ma rozróżnienia między „oryginalnym plikiem” a „linkiem do pliku”: masz tylko dwie nazwy tego samego pliku, a usunięcie tylko jednej z nich nie spowoduje usunięcia drugiej.
sudo
), jeśli utworzyłeś go za pomocą podanego polecenia (jako superużytkownik).
Mam ten skrypt, aby usunąć zbędne twarde linki. Ale uważaj - to dość niebezpieczne.
#!/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
W rzeczywistości rm
nie działa:
[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
Co działa to unlink AZP
.
AZP/
wygląda jak katalog, rm nie działa na katalogach bez flagi rekurencyjnej. Również zgodnie z dokumentami Coreutills. >>> Większość systemów zabrania tworzenia twardego linku do katalogu; na tych, gdzie jest to dozwolone, tylko superużytkownik może to zrobić (i ostrożnie, ponieważ tworzenie cyklu spowoduje problemy dla wielu innych narzędzi).
AZP
jest dowiązaniem symbolicznym do katalogu (lub czegokolwiek innego) rm AZP/
nie będzie działać, ponieważ rm
uważa, że jest to katalog (z powodu /
końca). Jednak rm AZP
będzie działać dobrze. -1
Jeśli chcesz usunąć tylko link, a tym samym zachować oryginalny plik, musisz użyć unlink.
unlink(1)
robi? To płytkie opakowanie wokół unlink(2)
wywołania systemowego, to samo wywołanie systemowe, które rm(1)
stosuje się do wszystkich plików, które nie są katalogami.
unlink
, pomimo swojej nazwy, nie rozdzieli twardego linku na dwa osobne pliki, ale usunie pozycję katalogu „niepowiązanego” (ale nie plik / zawartość / i-węzeł, o ile liczba linków wynosi> 1).
ln -n /path/to/file
tworzy plik o nazwiefile
w bieżącym katalogu i jest skrótem odln --no-dereference /path/to/file
. Oznacza to, że jeśli/path/to/file
jest dowiązaniem symbolicznym, nowo utworzone dowiązanie twarde wskaże to dowiązanie symboliczne zamiast celu dowiązania symbolicznego.