Gần đây tôi đã tạo một liên kết với các mục sau:
sudo ln -n originalFileLocation
Làm cách nào để xóa một liên kết cứng?
Gần đây tôi đã tạo một liên kết với các mục sau:
sudo ln -n originalFileLocation
Làm cách nào để xóa một liên kết cứng?
Câu trả lời:
Bạn có thể xóa nó rm
như bình thường : rm NameOfFile
. Lưu ý rằng với các liên kết cứng, không có sự phân biệt giữa "tệp gốc" và "liên kết đến tệp": bạn chỉ có hai tên cho cùng một tệp và xóa chỉ một tên sẽ không xóa tên kia.
sudo
), nếu bạn đã tạo nó bằng lệnh bạn đã cung cấp (với tư cách là siêu người dùng).
Tôi có kịch bản này để loại bỏ các liên kết cứng dư thừa. Nhưng hãy cẩn thận - nó khá nguy hiểm.
#!/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
Trên thực tế rm
không hoạt động:
[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
Những gì làm việc là unlink AZP
.
AZP/
trông giống như một thư mục, rm không hoạt động trên các thư mục mà không có cờ đệ quy. Cũng theo các tài liệu coreutills. >>> Hầu hết các hệ thống đều cấm tạo liên kết cứng đến thư mục; trên những nơi được phép, chỉ có siêu người dùng mới có thể làm như vậy (và thận trọng, vì việc tạo chu trình sẽ gây ra sự cố cho nhiều tiện ích khác).
AZP
là một liên kết tượng trưng đến một thư mục (hoặc bất cứ điều gì khác) rm AZP/
sẽ không hoạt động vì rm
nghĩ rằng đó là một thư mục (vì /
ở cuối). Tuy nhiên rm AZP
sẽ hoạt động tốt. -1
Nếu bạn muốn xóa chỉ liên kết và do đó giữ tệp gốc, bạn phải sử dụng hủy liên kết.
unlink(1)
không? Đó là một trình bao bọc nông xung quanh lệnh unlink(2)
gọi hệ thống, cùng một lệnh gọi hệ thống rm(1)
sử dụng cho tất cả các tệp không phải là thư mục.
unlink
, mặc dù tên của nó, sẽ không tách một liên kết cứng thành hai tệp riêng biệt, nhưng xóa mục nhập thư mục "không liên kết" (nhưng không phải tệp / nội dung / inode, miễn là số lượng liên kết là> 1).
ln -n /path/to/file
tạo một tệp có tênfile
trong thư mục hiện tại và viết tắt choln --no-dereference /path/to/file
. Điều này có nghĩa là nếu/path/to/file
là một liên kết tượng trưng, liên kết cứng mới được tạo sẽ trỏ đến liên kết tượng trưng đó thay vì mục tiêu của liên kết tượng trưng.