มีวิธีใดในการสร้างลิงก์ในตัวค้นหาหรือไม่


8

มีวิธีใดในการสร้างลิงก์ในตัวค้นหาหรือไม่

ฮาร์ดลิงก์ในเทอร์มินัลจะถูกสร้างขึ้นด้วย:

ln /path/to/file /path/to/newpath

ในขณะที่ symlink / alias สามารถทำได้โดยถือคำสั่งและตัวเลือกหรือ

ln -s /path/to/file /path/to/newpath

(แม้ว่าพฤติกรรมของ 'นามแฝง' และ 'ln' นั้นแตกต่างกัน )

คำตอบ:


7

คุณสามารถสร้างบริการ Automator เช่นนี้:

ป้อนคำอธิบายรูปภาพที่นี่

การดำเนินการนี้จะใช้ไฟล์ที่เลือกและสร้างฮาร์ดลิงก์ไปยังพวกเขาในไดเรกทอรีที่มีอยู่ จากนั้นคุณสามารถลากและวางลิงก์ไปยังตำแหน่งที่คุณต้องการ

สิ่งนี้จะใช้ได้กับไฟล์ที่มีช่องว่างในชื่อ แต่จะไม่ใช้กับไฟล์ที่มีเครื่องหมายคำพูดอยู่ในชื่อ

คุณสามารถเข้าถึงได้จากเมนูFinder » บริการเมนูบริบทและคุณสามารถกำหนดแป้นพิมพ์ลัดให้คล้ายกับ Lทางลัดสำหรับชื่อแทน (อาจL)


1
มีวิธีในการดำเนินการที่มีผลเมื่อทำการลาก / วางจากโฟลเดอร์หนึ่งไปยังอีกโฟลเดอร์หนึ่งในขณะที่กดปุ่มตัวเลือกที่มีโฟลเดอร์ปลายทางเพื่อให้สามารถสร้างฮาร์ดลิงก์โดยตรงในไดเรกทอรีใหม่ได้หรือไม่
Michael

@Michael ที่อาจจะทำได้ดีที่สุดเป็นคำถามของตัวเองและไม่แสดงความคิดเห็นในคำตอบนี้
แดเนียล

1
จากbashมุมมองที่ควรทำงานกับไฟล์ที่มีเครื่องหมายคำพูดอยู่ในชื่อ มีเหตุผลบางอย่างที่เกี่ยวข้องกับ Automator หรือไม่เพราะเหตุใด (คุณทดสอบว่าจริงแล้วใช้ไม่ได้กับเครื่องหมายคำพูด)
Wildcard

ที่เกี่ยวข้องจาก Unix & Linux Stack Exchange: วิธีใช้อาร์กิวเมนต์เช่น $ 1 $ 2 …ในการ for loop? (มีไวยากรณ์ที่ง่ายกว่าหลาย ๆ แบบที่คุณสามารถใช้ได้)
Wildcard

@Daniel: ฉันขยายการแก้ปัญหาของคุณด้วยรหัสการกลั่นเพื่อที่จะได้รับ "My File Hardlink.txt" แทน "My File.txt Hardlink" ซึ่งการเชื่อมโยงประเภทไฟล์ที่ขัดขวาง กรุณาตรวจสอบมันขอบคุณ
porg

2

ไม่มีวิธีการทำเช่นนี้ใน Finder.app อย่างไรก็ตามหากเป้าหมายของคุณเพียงเพื่อหลีกเลี่ยงการพิมพ์คำสั่งลงใน Terminal.app คุณสามารถใช้ Automator.app เพื่อสร้างเวิร์กโฟลว์เพื่อทำคำสั่งให้คุณ


2

ฉันต้องการคำว่าลิงก์ในการเปลี่ยนชื่อด้วยนามสกุลที่สงวนไว้มิฉะนั้นตัวค้นหาจะไม่รู้จักประเภทไฟล์

ดังนั้นฉันจึงใช้คำตอบของแดเนียล (ขอบคุณสำหรับสิ่งนั้น) และเปลี่ยนมันเล็กน้อย

for f in "$@"
 do  
  dir=$(dirname "$f")
  filename=$(basename "$f")
  extension=$([[ "$filename" = *.* ]] && echo ".${filename##*.}" || echo '')
  filename="${filename%.*}"
  ln "$f" "${dir}/$filename Hardlink$extension"
done

แก้ไข: เพิ่มสิ่งที่ฉันคิดว่าเป็นรหัสการจัดการส่วนขยายที่ดีกว่า - ควรว่างเปล่าหากไม่มีส่วนขยาย ขออภัยฉันไม่เก่งสคริปต์การเข้ารหัสดังนั้นโปรดแบ่งปันการแก้ไขที่คุณคิดว่าความต้องการนี้


ใช้ได้ดีทีเดียว. เพียงข้อแม้: หากคุณมีไฟล์ที่ไม่มีส่วนขยายใด ๆ คุณจะได้รับผลลัพธ์ที่น่าแปลกใจจริงๆ! (และถ้าหนึ่งในไดเรกทอรีที่มีระยะเวลาในชื่อแปลกใจจะปรากฏในรูปแบบที่แตกต่างกัน)
Wildcard

1

ใช่ทางอ้อม

Automator ช่วยให้คุณสร้างบริการที่เรียกใช้เชลล์สคริปต์ใด ๆ และยังสามารถขอเส้นทางไปยังปลายทางสำหรับฮาร์ดลิงก์ (เนื่องจากจะไม่อยู่ในตำแหน่งเดียวกับต้นฉบับ) ฉันคิดว่าคุณสามารถกำหนดตำแหน่งลิงก์เป็นค่าเริ่มต้นได้จากที่ใดก็ได้เช่นเดสก์ท็อป

เพียงเพิ่มขั้นตอนในการแสดงกล่องโต้ตอบเพื่อป้อนหรือเลือกปลายทางและส่งผ่านไปยังlnคำสั่งของคุณ


1

คำตอบที่ดีของ Daniel แต่ฉันขอแนะนำให้แทนที่รหัสสคริปต์ของเขาด้วยรหัสด้านล่างซึ่งรักษาประเภทไฟล์ไว้

for f in "$@"
do  
  ln "$f" "Plink-$(basename "$f")"
done

"ไม่ทำลายรูปแบบไฟล์" หมายความว่าอย่างไร
user151019

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