Ответы:
Вы можете удалить его с rm
как обычно: rm NameOfFile
. Обратите внимание, что в случае жестких ссылок нет различий между «исходным файлом» и «ссылкой на файл»: у вас просто два имени для одного и того же файла, и удаление только одного из них не приведет к удалению другого.
sudo
), если вы создали его с помощью предоставленной вами команды (как суперпользователь).
У меня есть этот скрипт для удаления избыточных жестких ссылок. Но будьте осторожны - это довольно опасно.
#!/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
На самом деле rm
не работает:
[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
То , что работает это unlink AZP
.
AZP/
выглядит как каталог, rm не работает с каталогами без рекурсивного флага. Также в соответствии с документами Coreutills. >>> Большинство систем запрещают делать жесткую ссылку на каталог; на тех, где это разрешено, только суперпользователь может сделать это (и с осторожностью, поскольку создание цикла вызовет проблемы для многих других утилит).
AZP
это символическая ссылка на каталог (или что-то еще) rm AZP/
не будет работать, потому что rm
считает его каталогом (из- /
за конца). Однако rm AZP
будет работать просто отлично. -1
Если вы хотите удалить только ссылку и, таким образом, сохранить оригинальный файл, вы должны использовать unlink.
unlink(1)
делает? Это мелкая оболочка для unlink(2)
системного вызова, тот же системный вызов, который rm(1)
используется для всех файлов, которые не являются каталогами.
unlink
, несмотря на его имя, не будет разделять жесткую ссылку на два отдельных файла, но удалит «несвязанную» запись каталога (но не файл / content / inode, если количество ссылок> 1).
ln -n /path/to/file
создает файл с именемfile
в текущем каталоге и является сокращением дляln --no-dereference /path/to/file
. Это означает, что, если/path/to/file
это символическая ссылка, вновь созданная жесткая ссылка будет указывать на эту символическую ссылку вместо цели символической ссылки.