ฉันจะลบเป้าหมายของลิงก์สัญลักษณ์โดยไม่ลบลิงก์เองได้อย่างไร


10

ฉันมีการเชื่อมโยงสัญลักษณ์ที่ชี้ไป~/Desktop/test.txt~/rendu/test.txt

ฉันรู้เส้นทางเท่านั้น~/Desktop/test.txtฉันต้องการวิธีที่รวดเร็วในการลบ~/rendu/test.txtโดยไม่ต้องลบลิงก์สัญลักษณ์

สำหรับผู้ที่ต้องการทราบสาเหตุ: ฉันมีไฟล์ชื่อcrypted.xxxบนเดสก์ท็อปของฉันซึ่งถูกเข้ารหัสและมีรหัสผ่านของฉัน

เมื่อฉันต้องการอัปเดตไฟล์ที่เข้ารหัสของฉันฉันจะถอดรหัสและสร้างcrypted.txtในไดเรกทอรีพิเศษ ดังนั้นฉันจึงเชื่อมโยงไปยังไฟล์นั้นบนเดสก์ท็อปของฉันเพื่อเหตุผลในทางปฏิบัติ แต่หลังจากดูที่ฉันcrypted.txtฉันต้องการลบอย่างรวดเร็วcrypted.txt(แต่ไม่ใช่ลิงค์ในเดสก์ท็อป)


4
รอคุณต้องการลบไฟล์ (ตามคำถามของคุณแนะนำ) หรือลบเนื้อหาของไฟล์ (ตามชื่อ sais)
Jacob Vlijm

ลบไฟล์และเก็บลิงค์สัญลักษณ์ขออภัยในความเข้าใจผิด
Ugo Hed

2
บางทีคุณอาจลองใช้ตัวจัดการรหัสผ่านโดยเฉพาะแทนก็ได้ Keepassนั้นค่อนข้างดีและอยู่ใน repos
evilsoup

คำตอบ:


11

ใช้findเพื่อค้นหา symlink จากนั้นใช้readlinkเพื่อรับพา ธ แบบเต็มไปยังเป้าหมายไปที่rm:

find ~/Desktop/ -type l -name 'test.txt' -exec bash -c 'rm "$(readlink -f "$1")"' _ {} \;

หรือตามที่คุณทราบชื่อลิงก์อยู่แล้ว:

rm "$(readlink -f ~/Desktop/test.txt)"

4
ระวังด้วยลิงก์ที่เกี่ยวข้อง ลิงก์สัญลักษณ์ที่สัมพันธ์กันถูกตีความว่าสัมพันธ์กับไดเรกทอรีที่อยู่ในนั้น แต่rmคำสั่งของคุณจะตีความว่ามันสัมพันธ์กับไดเรกทอรีปัจจุบันของเชลล์ ดังนั้นจึงมีความเป็นไปได้ที่คำสั่งนั้นจะลบไฟล์อื่นจากลิงก์สัญลักษณ์ที่ชี้ไป
kasperd

5
@kasperd ด้วย-f -eหรือ-mเส้นทางแบบเต็มจะถูกส่งกลับถึงแม้ว่าจุด symlink เป้าหมายไปยังเส้นทางญาติดังนั้นใช่ว่า 'SA ความกังวลในกรณีของrm "$(readlink ~/Desktop/test.txt)"แต่ไม่ได้เมื่อใช้หรือ-f -e -m
kos

@ kos คุณพูดถูก ในกรณีนี้คุณต้องกังวลหากมีเงื่อนไขการแข่งขันใด ๆ
kasperd

อีกวิธีหนึ่งสามารถใช้realpathซึ่งทำในกรณีนี้เหมือนกับreadlink -f(แต่ยังใช้งานได้หากเป้าหมายนั้นไม่ใช่ลิงก์)
leftaroundabout

6

เพียงใช้:

printf "" > "$(readlink '/path/to/link')"

เพื่อล้างไฟล์หรือ

rm "$(readlink '/path/to/link')"

เพื่อลบไฟล์

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.