เมื่อเร็ว ๆ นี้ฉันสร้างลิงค์ด้วยสิ่งต่อไปนี้:
sudo ln -n originalFileLocation
ฉันจะลบฮาร์ดลิงก์ได้อย่างไร
เมื่อเร็ว ๆ นี้ฉันสร้างลิงค์ด้วยสิ่งต่อไปนี้:
sudo ln -n originalFileLocation
ฉันจะลบฮาร์ดลิงก์ได้อย่างไร
คำตอบ:
คุณสามารถลบมันด้วยตามปกติ: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(1)
เหรอ? มันเป็น wrapper ตื้น ๆ รอบการunlink(2)
เรียกระบบการเรียกระบบเดียวกันที่rm(1)
ใช้สำหรับไฟล์ทั้งหมดที่ไม่ได้ไดเรกทอรี
unlink
แม้จะเป็นชื่อแล้วมันจะไม่แยกฮาร์ดลิงก์ออกเป็นสองไฟล์แยกกัน แต่จะลบรายการไดเรกทอรี "ไม่ได้ลิงก์" (แต่ไม่ใช่ไฟล์ / เนื้อหา / inode ตราบใดที่จำนวนลิงค์คือ> 1)
ln -n /path/to/file
สร้างไฟล์ชื่อในไดเรกทอรีปัจจุบันและเป็นชวเลขfile
ln --no-dereference /path/to/file
ซึ่งหมายความว่าหาก/path/to/file
เป็นลิงก์สัญลักษณ์ฮาร์ดลิงก์ที่สร้างขึ้นใหม่จะชี้ไปที่ symlink นั้นแทนที่จะเป็นเป้าหมายของ symlink